UINavigationController布局Y值64px问题

来源:互联网 发布:mmd动作数据制作 编辑:程序博客网 时间:2024/06/01 10:44

背景:iOS7之前控制器的self.view的Y的0点是在Navgationbar的底部开始的. iOS7之后,苹果推行全屏布局控制器的self.view的Y的0点是屏幕顶部.然而有时候还是会遇到y之前从0开始的,突然又从64开始了,下面介绍一些改变此属性的情况。

第一坑:如果你的self.view的第一个视图是scrollView类视图. eg: 如果你把一个tableView的Y 约束设置为距离self.view.Y 为64.看起来很和谐,刚好是navgationbar 44 + 状态栏20 = 64 的距离.在storyboard上看上去一切没有问题. 当你跑起来发现tableview的里面的cell Y值多了64.

因为iOS7之后多了一个新特性(automaticallyAdjustsScrollViewInsets),当控制器的self.view的第一个视图是scroview类视图时. 会自动调整scrollView视图里面的子视图的的Y值往下移64点.也就是说tableview的Y值还是屏幕的顶部0点,而cell自动下调了64.想想是不是很贴心.怕你的cell的内容被navgationbar挡住了.fuck 加上之前设置的距离 64加上自动调整的64 就成了 128.
经测试storyboard设置y的约束为距离 top layout guide.bottom为0 也一样会造成这个效果.

解决方法

  • 在控制器里设置 self.automaticallyAdjustsScrollViewInsets = NO;
  • 在storyboard 取消
  • 设置tableView.Y 距离self.view.Y 为0


第二坑: 如果设置navgationBar的barTinColor颜色或者图片, 你会发现设置好的颜色跟图片. 跟原来的图片颜色不一样.navgationBar会半透明化. 导致有色差. 设置self.navgationBar.translucent = NO; 取消半透明,会发现self.view的Y值不是屏幕的顶部,而是navgationBar的底部. 如果之前设置距离self.view.Y = 64 的话就会发现多64个点的距离。



第三坑: 经测试设置控制器的self.edgesForExtendedLayout = UIRectEdgeNone;也会导致self.view Y原点下移64. 导致跟iOS6时代一样Y原点是在Navgationbar的下面.