使用UINavigationController 布局多64 少64的问题

背景: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的下面.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值