使用[UIScreen mainScreen].bounds就够了吗
获取屏幕的宽高,觉得就这么一行简单的代码[UIScreen mainScreen].bounds,就可以读取出屏幕的宽高(点)。这有问题吗?没有问题呀,但是为啥我获取到的值,跟实际的屏幕尺寸不匹配呢?在项目中,开始是6Plus的尺寸一直获取不正确,后面又发现iPhone XR和iPhone X MAX的尺寸也不正确。
下图是所有iPhone设备的屏幕尺寸列表:
iPhone所有屏幕尺寸和分辨率到处查找原因,发现光会使用这句代码还不够,这句代码获取到的值还会受下面两种情况的影响。
- 6Plus上开启了“显示放大”模式;
- 启动图中没有正确加入该类型的启动图。比如:iPhone xr的设备,没有配置启动图,就获取不到正确的屏幕尺寸。
但是为什么启动图没加,这个问题没有被发现呢。首先我是知道启动图不添加,不会正确初始化屏幕的尺寸这个问题,我在查找问题的时候也去看了LaunchImage里的启动图,可是为什么没发现xr和x max的启动没有添加呢,巨坑来了:
Xcode9升级到xcode10时, LaunchImage 上iOS8 and later被默认去掉打钩了,所以咋一看LaunchImage里所有空位的地方都放了启动图了。
这个问题就变为了iPhone XR和X Max的适配不彻底导致,这里具体怎么适配,可以参考这边文章:
适配iPhone XR/iPhone XS Max
因此正确获取iPhone XR和X Max的解决方案是:
- 打开launchImage里的ios8.0 and later
- 添加iPhone XS Max 和iPhone XR的启动图
不过由于现在Xcode10.1了也还没有解决,Xcode10打的包上线后在iOS9.3的设备上,出现大面积随机的crash的问题。要么解决打包的问题,要么像我们选择暂时还是用Xcode9打包上线。所以目前等待苹果赶紧修复这个问题。
网友评论