适配iPhone Xs Max XR 坑点
首先我们对比一下iPhoneX和这次新发布的三款手机的尺寸:
iPhoneX (@3x) 的分辨率:2436 * 1125 || pt: 812 * 375
iPhoneXs (@3x) 的分辨率: 2436 * 1125 || pt: 812 * 375
iPhoneXs Max (@3x) 的分辨率:2688 * 1242 || pt: 896 * 414
iPhoneXr (@2x) 的分辨率:1792 * 828 || pt: 896 * 414
可以看出,Xs是和X的尺寸一样,这个不用适配也都正常。而Xs Max和Xr的像素是一样的,所以我们只需要适配896 * 414 尺寸即可。他们的刘海高度都一样,也就是说在这四种都按照iPhoneX的逻辑即可。
点一:
需要给项目添加Xs Max的启动图,如果没有添加的话,默认获取到的仍然是X的尺寸。这是苹果做的兼容处理,认为你的项目还没有适配Xs Max,所以就给你兼容了一下。加上启动图之后获取到的就是正确尺寸啦。
点二:
在判断是否有刘海时,不要使用尺寸了。iOS 11 引入了safeAreaInsets,只用这个进行判断能够通杀这四种尺寸
点三:
在界面中弹出个alert之后,再使用safeAreaInsets进行判断,发现结果不正确。这是由于弹窗会改变keywindow导致的,注意代码的书写
点四:
在模拟器中获取到的XS Max尺寸都正常,但是在真机中仍获取到的是X尺寸。这个一直没能搞清楚是怎么回事????
点五:
如果老项目运行之后报info.plist之类的错误,那就是因为引入的第三方库中含有了info.plist文件造成的。需要在Build Phases-----Copy Bundle Resources中删除plist即可