iOS开发:iOS11安全区域适配问题

       iPhone X刚发布的时候,适配新尺寸有好多人会不适应,颠覆了之前的常识,不过过了不久大家都熟悉之后,就适应和解决了iPhone X的齐刘海带来的开发问题。

       在这里我只分享一下,iOS 11下App开发过程中tableview的内容下移20pt或者下移64pt的适配问题,造成下移原因是iOS 11之后,controller的automaticallyAdjustsScrollViewInsets属性被废弃,导致tableview如果超出安全区域时系统自动调整了SafeAreaInsets值,从而影响了adjustedContentInset的值。

       安全区域的概念是iOS 11出来之后新提出来的,就是系统自动调整tableview内容偏移量,根据安全区域来调整的,如果你新建xib视图控制器,你会发现,有一个安全区域的范围,那就是安全区域。安全区域定义了View中可视区域的部分,这样是为了保证不被系统的状态栏、父试图提供的View覆盖。每个View都可以改变安全区域的大小,包括控制器controller也一样可以,使用additionalSafeAreaInsets去扩展安全区域。

分享一个本人开发时候遇到的情况,具体如截图所示:

iOS开发:iOS11安全区域适配问题_第1张图片

iOS开发:iOS11安全区域适配问题_第2张图片

       这个是tableview的区头和cell之间的重叠问题,其实还是安全区域引起的,其实解决这个问题很简单,我这里使用的是xib创建的区头View,直接再xib里面修改即可。具体如下图所示:

iOS开发:iOS11安全区域适配问题_第3张图片


       如果tableview提前设置了automaticallyAdjustsScrollViewInsets = YES,那么不会发生问题,所有情况都是由系统来调整内容的偏移量。tableViewframe超出安全区域范围时,系统会自动调整内容的位置,SafeAreaInsets的值会不为0,于是就会影响tableViewadjustContentInset值,最后会影响tableView的内容展示效果,导致tableViewcontent下移了SafeAreaInsets的距离。如果SafeAreaInsets值为0时,是正常的情况。

        解决方法有三种:1.重新设置tableView的contentInset值,来抵消SafeAreaInset的值,原因是因为:  内容下移偏移量 = contentInset + SafeAreaInset;2. 设置tableView的contentInsetAdjustmentBehavior属性(而且contentInsetAdjustmentBehavior的属性,也是用来取代automaticallyAdjustsScrollViewInsets属性的);3. 通过设置iOS 11新增加的属性addtionalSafeAreaInset来设置;

iOS开发:iOS11安全区域适配问题_第4张图片


        这里分享一下适配iPhone X的约束的宏定义:

#define SCREEN_WIDTH              [UIScreen mainScreen].bounds.size.width

#define SCREEN_HEIGHT             [UIScreen mainScreen].bounds.size.height

//iPhone_X layout

#define iPhone_X                 (SCREEN_HEIGHT == 812.0)

#define Status_H                 (iPhone_X ? 44 : 20)

#define NavBar_H                  44

#define Nav_Height                (Status_H + NavBar_H)

#define Tab_Height                (iPhone_X ? 83 : 49)

#define ScaleW(value)             (value/375.0 * SCREEN_WIDTH)

#define iPhoneX_Bottom_Margin     20

#define Bottom_Margin             (iPhone_X ? -20 : 0)

#define BannerH                   ScaleW(186.0f)

iOS开发:iOS11安全区域适配问题_第5张图片

        

想要了解更多内容,欢迎关注本人微信公众号,可以进一步谈论交流!
iOS开发:iOS11安全区域适配问题_第6张图片


你可能感兴趣的:(iOS开发)