背景:iOS7之前控制器的self.view的Y的0点是在Navgationbar的底部开始的. iOS7之后,苹果推行全屏布局控制器的self.view的Y的0点是屏幕顶部.
- 第一坑:如果你的self.view的第一个视图是scrollView类视图. eg: 如果你把一个tableView的Y 约束设置为距离self.view.Y 为64.看起来很和谐,刚好是navgationbar 44 + 状态栏20 = 64 的距离.在storyboard上看上去一切没有问题. 当你跑起来发现tableview的里面的cell Y值多了64.note:下图的效果是:UIViewController的加一个Tableview. 如下图:
因为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的下面.跟上图一样的效果.
解决方案 设置tableView.Y 距离self.view.Y 为0. 或者设置导航栏为半透明self.navgationBar.translucent = YES; 这样self.view的Y就在屏幕的最顶部.