适配iPhone X和iOS 11遇到的问题
本文主要记录我在适配过程中遇到的问题。
1、如何在iPhone X上全面屏运行
需要修改启动图以适配iPhone X,这个跟以前iPhone 6出来时一样,添加对应的启动图即可。
由于我们的项目使用的是LaunchScreen.storyboard,所以设置storyboard的左下角的View as:IPhone X即可。
image.png
然后添加对应的启动图片,尺寸为1125*2436. 我们项目的图片放在了Assets.xcassets里面,所以先修改对应的Contents.json,添加如下:
{
"extent" : "full-screen",
"idiom" : "iphone",
"filename" : "LaunchImage@1125X2436.png",
"minimum-system-version" : "11.0",
"subtype" : "2436h",
"orientation" : "portrait",
"scale" : "3x"
}
注意修改filename为自己的filename,然后将启动图放在对应的位置即可。
这里遇到了一个问题,在修改完之后iPhone X上并未显示启动图,删除应用重新安装也不行,后来重启了下手机重新安装就好了,猜测是有缓存。
2、导航栏尺寸变化适配
由于我们的项目并未使用自定义的navigationbar和tabbar,所以省去了很多麻烦,比如说MJRefresh的问题,在上面的博客中有提到,如果有相似情况的可以看看。
在我们的项目中只需要修改下诸如tableview.frame.y之类的即可。
这里使用宏定义
#define SafeAreaTopHeight (KScreenHeight == 812.0 ? 88 : 64)
在设置界面内容时,子控件的y值使用这个宏即可。
3、tableview顶部多出空白
原因是代码中只实现了heightForHeaderInSection方法,而没有实现viewForHeaderInSection方法。那样写是不规范的,只实现高度,而没有实现view,但代码这样写在iOS 11之前是没有问题的,iOS 11之后应该是由于开启了估算行高机制引起了bug。添加上viewForHeaderInSection方法后,问题就解决了。或者添加以下代码关闭估算行高,问题也得到解决。
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
4、scrollView在转场动画回来后发生偏移
网上有很多提到pop回来后会向下偏移,在我们项目中是在竖屏scrollView上present一个横屏的viewController,然后dismiss回来时scrollView向右发生了偏移,可能是同一个问题。
添加如下代码解决
if (@available(iOS 11.0, *)) {
scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
5、iOS 11上的相机权限
iOS11上系统默认打开了用户相册的访问权限,但是当你保存图片时APP就会crash,原因是需要在info.plist再申明一个NSPhotoLibraryAddUsageDescription的key,同时为了兼容iOS11以前的机型,保留以前NSPhotoLibraryUsageDescription的key
6、隐藏iPhoneX的home条(HomeIndicator)
在视频播放控制器中重写以下方法:
- (BOOL)prefersHomeIndicatorAutoHidden {
return YES;
}
默认返回NO,返回YES Home指示条就能自动隐藏了,此方法是在屏幕若无交互事件响应时,延迟2秒左右会回调此方法。
如果想全面了解iPhone X以及iOS 11的适配问题,推荐阅读以下文章:
官方文档:https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/
其他精选博客:https://www.jianshu.com/p/3a9ad4f0fa32?appinstall=0
https://www.jianshu.com/p/670318acae90
https://www.jianshu.com/p/efbc8619d56b
里面详细介绍了iPhone X的尺寸变化以及适配方法。