美文网首页iOS旅途
iPhoneX安全区域适配

iPhoneX安全区域适配

作者: 朝阳小麦 | 来源:发表于2019-01-09 17:18 被阅读23次

    使用人员:iOS开发人员。
    本文内容:iPhoneX之后,出现了安全区域的概念,安全区域外的屏幕部分放置可点击控件,会和系统手势有冲突。怎么适配呢?
    最后附获取安全区域外顶部和底部高度的方法,以及iPhone各种机型尺寸(适配8.0以后)。

    1.一般来说,如果这个界面只是一个UITableView,那么直接设置contentSize就行了,美观方便。
     _tableView.contentInset = UIEdgeInsetsMake(0, 0, 15, 0);
    
    2.如果不是tableview,并且底部有视图呢?比如下图界面:

    以上述界面为例,就可以设置底部视图的约束为这样:

        [self.view addSubview:self.bottomView];
        [_bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.right.mas_equalTo(0);
            make.height.mas_equalTo(50);
            if (@available(iOS 11.0, *)) {
                make.bottom.mas_equalTo(self.view.mas_safeAreaLayoutGuideBottom);
            } else {
                make.bottom.mas_equalTo(0);
            }
        }];
    

    注意,如果上面有视图,也要跟着改哦,否则会挡住。
    这么修改过后,效果如下图所示:

    这么一来,底部操作项就不会被挡住了。但是可能会觉得有点不美观。可以加个视图填充下底部安全区外颜色,我是这么写的:

    if (@available(iOS 11.0, *)) {
      __block CGFloat bottomPadding = UIApplication.sharedApplication.keyWindow.safeAreaInsets.bottom;
      UIView *bottomView = [UIView new];
      bottomView.backgroundColor = [UIColor whiteColor];
      [self.view addSubview:bottomView];
      [bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.bottom.right.mas_equalTo(0);
        make.height.mas_equalTo(bottomPadding);
      }];
    }
    

    效果如下图所示:


    完成!
    有其他方式,欢迎留言_

    Tips:

    1.iOS如何获取安全区域外顶部和底部的高度?

    OC:

    if (@available(iOS 11.0, *)) { 
      UIWindow *window = UIApplication.sharedApplication.keyWindow; 
      CGFloat topHeight = window.safeAreaInsets.top; 
      CGFloat bottomHeight = window.safeAreaInsets.bottom; 
    } 
    

    Swift:

    if #available(iOS 11.0, *) { 
      let window = UIApplication.shared.keyWindow 
      let topHeight = window?.safeAreaInsets.top 
      let bottomHeight = window?.safeAreaInsets.bottom 
    } 
    
    2.iPhone尺寸(2018年)

    iPhone5 == iPhone5s == iPhone5c : 320 x 568
    iPhone8 == iPhone7 == iPhone6s == iPhone6 : 375 x 667
    iPhone8plus == iPhone7plus == iPhone6s plus == iPhone6plus : 414 x 736
    iPhoneX == iPhoneXS : 375 x 812
    iPhoneXS Max == iPhoneXR : 414 x 896

    相关文章

      网友评论

        本文标题:iPhoneX安全区域适配

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