美文网首页
iOS 11 电池栏的问题

iOS 11 电池栏的问题

作者: 阶梯 | 来源:发表于2017-10-09 13:58 被阅读24次

    iOS 11 新添加了,安全域的概念,电池栏也从原来的20变成了44
    那么问题来了,对于滚动类视图,要设置视图的大小的时候就需要拿到 电池栏的高度;

    • 方法一 :动态计算电池栏的高度 KScreenHeight - StatusRectHeight - NavRectHeight.

    并且 要添加上 下面2行代码

    if (@available(iOS 11.0, *)) {
           _mainTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
          }else {
          self.automaticallyAdjustsScrollViewInsets = NO;
         }
    

    因为我们的项目中,设置了
    [UINavigationBar appearance].translucent = NO;
    所以,当用方法二的时候,push的时候,会窜一下;
    因此,设置tableview的frame的时候,只能动态获取 电池栏的高度
    KScreenHeight - StatusRectHeight - NavRectHeight.

    • 方法二 : 利用iOS 11 新增的方法 :viewSafeAreaInsetsDidChange
    -(void)viewSafeAreaInsetsDidChange{
        [super viewSafeAreaInsetsDidChange];
        CGRect rect = self.mainTableView.frame;
        rect.origin.y = VIEWSAFEAREAINSETS(self.view).top;
        rect.size.height = KScreenHeight - rect.origin.y;
        self.mainTableView.frame = rect;
    }
    

    注意 : 当设置 translucentNO的时候,采用上面方法,push的时候,会窜一下;
    为解决这个问题,把 translucentYES, 这样导致的结果,

    • iOS 11的问题解决了,可以正常了;
    • iOS 11 以下的,对于滚动视图不滚动视图, 控件的布局,y 都需要设置为 64 开始。
      • iOS 11 以下,对于 滚动视图, 有个 automaticallyAdjustsScrollViewInsets 属性,系统默认为 YES【ps: 当为YES 的时候,视图会自动向下移动 64的距离】
        但是, 这个方法不能采取,因为 现在导航栏为透明的,automaticallyAdjustsScrollViewInsets 属性 虽然可以使得滚动视图从64的位置开始, 当上下滑动 tableview的时候,navigation 会透出 tableview的内容;
      • iOS 11 以下,对于 非滚动视图, 那么只能设置 第一个控件从 64 的位置开始,此方法可行;
        下面的这个方法也能实现,但是对于从一个隐藏了导航栏,再push到有透明导航栏的页面,就会出现个问题,push的时候会有个阴影存在,此方法不能采取。
      //设置后,控制器的view的frame的坐标Y增加64px紧挨着navigationBar下方,
     self.edgesForExtendedLayout = UIRectEdgeNone;
    

    总结 : 设置 translucentYES之后呢,就导致了,需要分情况设置 iOS 11 以下的控件内容了,所以,目前,我感觉还是动态获取 电池烂的方法比较好

    相关文章

      网友评论

          本文标题:iOS 11 电池栏的问题

          本文链接:https://www.haomeiwen.com/subject/dvzuyxtx.html