趁着iphoneX大行其道之际,赶紧写一篇低质量的文章,暴力适配下iphoneX
前言:写几个常用的宏定义,和判断iOS版本的方法,适配的时候方便使用
#define iPhone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640,960), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640,1136), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750,1334), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone6Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242,2208), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125,2436), [[UIScreen mainScreen] currentMode].size) : NO)
if(@available(iOS11.0,*)) {//判断当前iOS系统版本是不是iOS11
}else{
}
1.iOS11引入了Safe Area Layout Guide概念,如果你的xib报相关错误,那你直接去掉这个选项就好
如果你想用这个新特性的话,也可以,毕竟这个是专为iphoneX的适配而生,只要你在安全区域内布局,它的运行效果一定是上留天下留地,当你使用Safe Area Layout Guide的时候,它的界面上会多出类似于一个view的视图,我们可以把它看做一个不占位置的view,它只提供了一个相对位置,我们的视图根据安全区域适配就好
运行效果如图(如果运行在普通手机上的话,刚好底部铺满,顶部留出20像素的状态栏)
这个状态下,如果创建个view,设置frame是(0,0,100,100)的话,它会从安全区域的(0,0)点开始计算
2.现在进入正题,不用Safe Area Layout Guide如何适配iphoneX:
最容易出问题的地方有:启动图,顶部,底部,tableView,scrollview,collectionView,聊天界面
(1)启动图:适配iphoneX,首先得给启动页一个iphoneX大小的启动图,要不然在iphoneX上运行出来的app是有问题的
(2)顶部、底部:顶部主要分几种情况:automaticallyAdjustsScrollViewInsets 这个属性有可能影响滑动视图的原点位置,如果源码没有修改这属性,那iphoneX的适配最好也不要动;如果整个页面是collectionView的话调整它的contentInset就好,需要占满状态栏的话,上移24;如果空出状态栏,下移20;底部的话,可以直接给collectionView的frame的高度减去34;如果整个页面是tableView的话,注意下estimatedSectionHeaderHeight和estimatedSectionFooterHeight这两个属性。。把他们的值都设置为0
(3)前几天看了下美团的大神们的适配方案,感觉不错,然后自己就没动力写了。。。
https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651746838&idx=1&sn=44565f985c8da698b4fde31bf33d6dc2&chksm=bd12ab5b8a65224dbeb872dc44be6ef54607809f7f692ab01e62b77a3e8603f336e2e850f9c3&mpshare=1&scene=23&srcid=0928i1n7eQVLDzJk6OsqfHIa#rd