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

官方例图


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

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

IOS7 edgesForExtendedLayout

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

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


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


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

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

此图来自网络


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


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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 虽然错过牡丹花,但却遇牡丹石和黄金甲 牡丹路上九步走,平安吉祥长长久! 满城皆是黄金甲 太漂亮了!!! 天高云淡5...
    田园牧歌123阅读 278评论 0 0
  • 正如作者希望从标题表达的观点——项目管理像做红烧肉一样简单,这本书以小姑娘朱笑笑的公司年会项目经理经历为主线,将干...
    荒草集阅读 3,037评论 1 16
  • 本文里所用的反向传播算法公式为Coursera里Andrew Ng所用的无正则化公式。 这张图很多人都非常熟悉。通...
    DizzyHint阅读 2,723评论 0 3
  • 背景: Mac系统最近提示更新XCode,一下子从7.3升到8,这一升不要紧,再编译的时候告诉我不支持iphone...
    Daniel_Guo阅读 252评论 0 2