iOS11以及iPhone X 总结

2018-02-01  本文已影响0人  cheer_harry

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;

}

上一篇下一篇

猜你喜欢

热点阅读