iOS7后使用UINavigationBar和TabBar出现的问题

iOS7后使用UINavigationBar和TabBar出现的问题_第1张图片
官方例图


图中的导航视图是存储在导航控制器视图属性中的视图,图中的所有其他视图都是由导航控制器管理的不透明视图层次的一部分。

导航控制器使用多个对象来实现导航界面了,我们负责提供这些对象,其余的是由导航控制器本身创建的。导航控制器创建导航栏和工具栏,用于导航界面,并负责管理这些视图。简单来说,导航控制器是一个特殊的容器,可以控制视图控制器之间的切换。

IOS7 edgesForExtendedLayout

视图控制器的UI界面,跳转时出现偏移问题,这个问题与导航条有关,简单介绍一下导航条。

导航控制器有个导航条(UINavigationBar),这个导航条被所有的视图控制器共享,导航条(UINavigationBar)位于整个屏幕的上方(整个视图的上方),它管理着视图控制器的NavigationItem。


edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向,因为iOS7鼓励全屏布局,它的默认值是UIRectEdgeAll,四周边缘均延伸。就是说,当你的容器是navigation controller时,默认的布局将从navigationbar的顶部开始,即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域,从而导致界面偏移。这就是为什么所有的UI元素都往上漂移了44pt。


上图的代码即可解决偏移问题。

UIButton按钮点事件不响应,底部有留白

iOS7后使用UINavigationBar和TabBar出现的问题_第2张图片
此图来自网络


若出现此问题,则需要考虑程序中是否存在TabBar,若是存在,检查隐藏TabBar的方式,如果使用self.tabBarController.tabBar.hidden=YES;需要修改隐藏方式,这个方法虽然可以将tabBar隐藏,但是那片区域无法被其他视图使用,如上图灰色区域。此时需要改变隐藏tabBar方式:


在界面跳转时使用 chat.hidesBottomBarWhenPushed = YES;即可隐藏。

注:以上为近期遇到的问题,希望能帮助遇到相同问题的人。若代码出现问题,多多指教。

你可能感兴趣的:(iOS7后使用UINavigationBar和TabBar出现的问题)