1、启动页的适配
①使用LaunchImage
如果你使用的是LauchImage加载的启动页,那么对于他的适配就比较简单了,直接在LauchImage中添加一个1125 * 2436的启动图片启动页面即可。
步骤:准备一张尺寸:1125 * 2436的启动图片, 将图片移动到项目中/Imagees.xcassets(或者Assets.xcassets)/LaunchImage下的iPhone X Portrait iOS 11+上面。
注意:将图片移动进去之后,在LaunchImage中的Contents.json中会自动生成如下代码:
{
"extent" : "full-screen",
"idiom" : "iphone",
"subtype" : "2436h",
"filename" : "1125-2436.png(此处为1125 * 2436启动图片名称)",
"minimum-system-version" : "11.0",
"orientation" : "portrait",
"scale" : "3x"
}
②使用Launch Screen Storyboard
使用Launch Screen Storyboard 方式来添加的启动页,iPhone X 的状态栏由原来的 20 变为了 44。这个如果在导航的位置设置自定义的 View,在 iPhone X 上出问题。会挡住 View 的显示。所以需要在自定义启动页的时候需要专门针对iPhone X做对应的配置,需要调整下 Top 的约束,以前为 -20 ,改为 -44 ;
2、iOS11新增版本判断API
iOS11版本现在有了简单的API,OC也开始支持swfit的@available语法,就可以不用再手写判断iOS版本了。
if (@available(iOS 11.0, *)) {
// 版本适配
}
3、访问相册权限变更
iOS11之前:访问相册和存储照片到相册(读写权限),需要用户授权,需要添加NSPhotoLibraryUsageDescription。
iOS11之后:默认开启访问相册权限(读权限),无需用户授权,无需添加NSPhotoLibraryUsageDescription,适配iOS11之前的还是需要加的。 添加图片到相册(写权限),需要用户授权,需要添加NSPhotoLibraryAddUsageDescription。
4、UITableView相关适配
www.jianshu.com/p/73394f7518c8
5、iPhone X导航栏适配
导航栏新增了一种大标题样式,默认设置是不开启,所以不需要修改。
iOS 11以前,导航栏的高度是64,其中状态栏statusBar的高度是20,底部TabBar的高度是49。
iOS 11之后,iPhone X导航栏的高度是88,其中状态栏statusBar的高度是44,底部TabBar的高度是83。
iPhoneX的底部增加了虚拟Home区,由于安全区域的原因默认tabBar的高度由49变为83,增高了34,所以自定义的底部TabBar也需要需改其适配方案。
目前没发现有iPhone X的机型判断API,建议使用size来做代替判断。
#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height
#define kNavBarHeight 44.0
#define kTabBarHeight kStatusBarHeight>20?83:49)
#define kTopHeight (kStatusBarHeight + kNavBarHeight)
#define isiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define iPhoneX [[UIScreen mainScreen] bounds].size.width >= 375.0f && [[UIScreen mainScreen] bounds].size.height >= 812.0f && isiPhone
6、安全区域
iOS 11之前, automaticallyAdjustsScrollViewInsets经常被设置成NO,由开发者去控制处理留白和坐标问题, 但是iOS 11+ automaticallyAdjustsScrollViewInsets = NO这句代码失效。
iOS 11后,把这个automaticallyAdjustsScrollViewInsets废弃,新增了contentInsetAdjustmentBehavior,这个属性是个枚举类型值,我们只需要把其设置成never就行了
解决TableView偏移88的问题:
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}