一、新屏幕情况介绍
- iPhone XS Max机型的屏幕是刘海屏,分辨率为1242 x 2688 ,屏幕的缩放比例是3,所以屏幕的宽高度分别为:
UIScreen.mainScreen.bounds.size.width = 1242/3 = 414;
UIScreen.mainScreen.bounds.size.height = 2688/3 = 896;
XS Max机型的屏幕是plus机型的全面屏版, 使用的图标是@3x.
- iPhone XR机型的屏幕也是刘海屏,分辨率为828 x 1792,屏幕的缩放比例是2,所以屏幕的宽高度分别为:
UIScreen.mainScreen.bounds.size.width = 828/2 = 414;
UIScreen.mainScreen.bounds.size.height = 1792/2 = 896;
XS Max机型的屏幕也是plus机型的全面屏版,尺寸与XS Max一致,只不过分辨率较低, 使用的图标是@2x.
二、屏幕适配关键点
1. 导航栏相关
如果是自定义导航栏view,此时要做的是,判断是刘海屏的情况下,将自定义的导航栏view拉高
判断是否是刘海屏的方法个人认为最好用的是statusBarFrame
CGRect statusBarFrame = UIApplication.sharedApplication.statusBarFrame;
if (statusBarFrame.size.height > 20) {// 看是不是全面屏X\ XS\ XR\ XS MAX以及后续
// do some thing to adjust layout
}
如果是使用的系统的导航栏,那么控制器里面子视图就需要注意了,在创建时使用的写死的64或者因为之前只适配iPhone X判断刘海屏的方法仅仅是判断高度是否==812,那么现在就要改掉,判断的方法和上面的一样
2. 底部类似tabbar、ActionSheet的视图
自定义的底部弹窗视图像ActionSheet样式的及最底部有个按钮那种的视图适配
个人适配方法是将底部最接近的按钮高度拉高20-30,看自己情况(系统的tabbar是拉高了34),然后设置按钮的contentEdgeInsets
btn.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 15, 0);
内部视图的高度计算要减去的是真实的底部条高度!!!
3. 不需要导航栏的页面的适配
- iOS11以上的适配依然需要
if (@available(iOS 11.0, *)) {
mainScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
由于状态栏的高度在刘海屏上是44,比原来高20,所以原来在iPhone X屏幕上做了适配的,在此时也一样需要
内页在使用侧滑返回手势返回时,内页隐藏导航栏而外部的不需要,此时就会多少有点尴尬。
个人认为在很重要的页面,可以做适配===仅供参考,(个人是看微信的效果模仿的)
- 导航条背景图片设置为透明图片
- 自定义view视图在导航条视图下面,自定义view的颜色为原来导航条颜色
- 这样的话,导航条上的UIBarButtonItem的渐变效果、点击效果不受影响
三、使用感受
公司买了 iPhone XS Max,手机用来玩吃鸡游戏体验是真的好!!连吃两把鸡。