iPhoneX已经发售,作为苦逼iOS开发程序员又要开始适配工作。
先说明因为本人开发的app只有竖屏显示,所以只介绍下个人竖屏适配的方法。
步入正题:
第一步
如图先给项目的LaunchImage加个启动图片。勾选“Portrait”属性如图红框所示。勾选后会多一个给iPhoneX的添加启动图的图片填充框。在次框中放入一张1125*2436的启动图。当然启动图就需要我们的公司的UI大神给了。然后启动你iPhoneX你会发现iPhoneX的耳朵已经填充,底部的tabbar也多了条黑线。
当然有的人是使用xib或者storyboard来当启动图的,就没有所说的:耳朵留黑与底部没有黑条的情况,但是在iPhoneX上运行会发现启动图的底部留白比其他设备要多出来很多,个人比较搓的解决方案是针对iPhoneX做特殊处理顶部多30个的偏移。
第二步
启动图弄好了,那就要针对ViewController里面的控件宽高做适配,我喜欢手写代码很少使用Storyboard来开发,所以我按设计稿的比例,来缩放控件在不同设备上的宽高。比如:设计稿的宽高比例是375:667(大部分设计师都是以iPhone6的逻辑比例做设计稿),那么实际设备上,控件的高就是((设计稿控件高度/667.0f)*[UIScreen mainScreen].bounds.size.height)。
我一般会写个宏:
#define IPH(asd) ((asd/667.0f)*[UIScreen mainScreen].bounds.size.height)
asd表示设计稿上控件的高度。
类似的宽度同理
#define IPW(asd) ((asd/375.0f)*[UIScreen mainScreen].bounds.size.width)
asd:表示设计稿上控件的宽度
这种按设计稿比例来缩放的适配方法,来适配除iPhoneX的设备还算过得去,但是用这种方法适配iPhoneX会发现高度的计算不是很正确,经过我的一些研究发现iPhoneX去掉耳朵的高度与底部黑线的高度正好是设计稿(大部分设计师都是以iPhone6的逻辑比例做设计稿)的@3x比例。去掉头部与底部就是苹果说的"safe area"(这是我的个人理解,可能是错的😒)。
所以按照这个说法,iPhoneX去打头部耳朵的高度与底部黑线的高度也是@3x的比例。那么头部高多少,底部又是高多少呢?iOS11出现一个新的属性safeAreaInsets,这个属性的值是UIEdgeInsets(top: 88.0, left: 0.0, bottom: 34.0, right: 0.0),由此可见iPhoneX的高度[UIScreen mainScreen].bounds.size.height-88-34 那就正好的@3x了。
当然storyboard好像要好适配一些。看来我也要多用storyboard了。
还有一个要补充就是那些把导航栏隐藏的界面要做特殊处理。