您的位置:首页 > 移动开发 > IOS开发

iPhone X适配以及iOS 11可能出现的常见崩溃(info.plist配置)

2017-12-04 10:30 736 查看

iPhone X适配

程序启动图,引导图等

iPhone X像素尺寸1125x2436,也就是说,你的启动图或者是闪屏页,App引导图等得新加一个图了,另外iPhone X用的是三倍图,开发用的逻辑分辨率即为375x812,可见iPhone X的宽度是和4.7尺寸一样的,只不过高度增加许多,程序启动页,可以专门为iPhone X增加(如下图),但App的其他页面,比如整个页面的背景图,自己做的引导页等就需要UI新给一张1125x2436的图,我的做法是在代码中对iPhone
X加载这张新图,把这张新图放在原背景图等的三倍图位置上,因为原来的三倍图是适配5.5寸的,避免图被拉伸。

程序启动页(选择好之后,自然会多出选择iPhone X的程序启动页的一项)



引导图或背景图等



安全区

 说到iPhone X适配问题,也得和大家解释一下安全区的概念,请看下图此图来自莫贝网,发布者mobileui,在此十分感谢,绿色部分即是安全区,也就是我们开发时所使用的区域



                                      

下面详细介绍一下非安全区域的尺寸如下图(此图来自莫贝网,发布者mobileui,在此十分感谢)



如何适配顶部和底部

我们适配好程序启动页之后,会发现导航栏和小刘海灰常近,我们需要调整一下导航栏+状态栏高度了,原来偶们都是统一64,而现在估计要重新写个宏了改为88,KDeviceHeight = 812 ? 88 : 64 ; 底部适配的话,注意距离底部34(逻辑分辨率)就好,至于tabBar的话,还是根据不同产品需求而定。

如何禁止scrollView的自动偏移64像素

原来我们只需要

设置automaticallyAdjustsScrollViewInsets=NO就可以了,iOS 11之后

    if (@available(iOS11.0, *)) {

        self.scrollView.contentInsetAdjustmentBehavior
= UIScrollViewContentInsetAdjustmentNever;

    } else {

        self.automaticallyAdjustsScrollViewInsets =NO;

    }


关于info.plist

关于定位服务。原有的NSLocationAlwaysUsageDeion改为NSLocationWhenInUseUsageDeion,因此,在原来项目中使用requestAlwaysAuthorization获取定位权限,而未在plist文件配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框不会弹出。建议新旧key值都在plist里配置。

关于相册服务。原来的Privacy - Photo Library Usage Description 改为 Privacy - Photo Library Additions Usage Description,建议新旧key值都在plist里配置。

关于Xib和StoryBoard适配

如果你只需要适配iOS 9以上的恭喜你,你可以直接在右边打开安全区,直接做适配即可



如果不是的话,那就有点麻烦了,我是这样来做的,将需要进行iPhone X的约束拖出来,如下图



(按住control,直接拖即可)

代码也需要进行补充,如下,此时你该多注意是否超过了下边的安全区

    if (KDeviceHeight ==812) {

        self.navBgViewHeightConstraints.constant =88;

        self.tipLabelHeightConstraints.constant +=24;

        [self updateViewConstraints];//这句加不加都不会影响效果。。。。

    }

    


关于webView的适配

适配好导航栏,你也把webView扩充到整个屏幕,可能会发现这样的问题,webView内部的tabBar下边会露出一块内容

解决方案有两种:

plan A:要h5前端去适配iPhone X

plan B:我们将webView去缩减回原来的高度,也就是

[UIScreen mainScreen].bounds.size.height - 88 -
34
底部34的高度就靠我们自己写一个view来做修补,
记得webView进入二级网页时,要把这个view隐藏,并给webView的高度增加34

if (@available(iOS11.0, *)) {

        self.webView.scrollView.contentInsetAdjustmentBehavior
= UIScrollViewContentInsetAdjustmentNever;

    }
另外,如果webView出现自动调整64的情况,可通过

if (@available(iOS 11.0, *)) {

        self.webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

    }
实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息