iOS11 适配方案调研
一:内容介绍
明确需要适配部分:
1.导航栏
2.滑动view (UIScrollView、UITableView、UICollectionView )
3.iPhoneX
4.相册权限
不明确部分:
1.iPhone X 上下导航栏是否需要重新设计
2.iPhone X 上下导航栏真机实际适配效果
3.弹框视图加载到keywindow与当前页面最上层视图的细微区别不明确。因为xcode9 iOS11 所有弹框都加到keywindow才正常。iOS11及xcode9以下,有时候弹框加到keywindow上面,会有异常。就是弹框不出现。
二:具体适配项
1.导航栏及所有Bar适配
(1)导航栏高度的变化
iOS11之前导航栏默认高度为64pt(这里高度指statusBar + NavigationBar),
iOS11之后如果设置了prefersLargeTitles = YES则为96pt,默认情况下还是64pt。
在iPhoneX上出现statusBar由以前的20pt变成了44pt,所以iPhoneX上高度变为88pt。
(2)导航栏(UINavigationBar UIToolbar)图层结构改变
iOS11之前导航栏的leftButton rightButton titleView 是直接添加在UINavigationBar及UINavigationItemView上面,并且使用的是frame布局的。
iOS11之后,视图层级发生了变化,leftButton rightButton titleView并不是直接添加在UINavigationBar或者UINavigationItemView上面,而是在他们外面嵌套了一个UIButtonBarStackView,而StackView并不是使用的frame,而是用的约束来布局,这里必须得用 AutoLayout 进行布局。
(3)上下导航栏中,纯代码写死的高度需要修改
发现项目中,很多地方有写死的上下导航栏高度。比如 64(导航栏+状态栏) 44(上导航栏) 49(下导航栏)
2.滚动视图适配 (UIScrollView、UITableView、UICollectionView)
A:视图偏移问题
xcode9,iOS11 之后,新引入safeArea(安全区),当我们设置过automaticallyAdjustsScrollViewInsets这个属性之后,在iOS11设备上运行这些滚动视图会偏移64pt,主要是iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增了contentInsetAdjustmentBehavior属性,
B.tableView在iOS11默认使用Self-Sizing,tableView的estimatedRowHeight、estimatedSectionHeaderHeight、 estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension(是一个大于0的具体值),这会造成sectionHeader、sectionFooter 留白 也就是高度与设置不符合。
C. 如果使用了Masonry 进行布局,就要适配safeArea(安全区),否则超出安全区之后,界面混乱。
3.iPhone X 适配
(1)LaunchImage
由于我们项目中,启动图使用的是LaunchImage,所以需要尺寸为1125x2436的启动图适配iPhone X
(2)TabBarController
主要是tabBar高度及tabBarItem偏移适配,iPhoneX由于底部安全区的原因UITabBar高度由49pt变成了34pt,所以,这块适配是否需要重新设计UI界面?
在iPhoneX上出现statusBar由以前的20pt变成了44pt,所以iPhoneX上高度变为88pt。
4.相册权限
相册权限需要增加,不然可能会造成闪退
增加info.Plist中的字段:
之前的这个字段:Privacy - Photo Library Usage Description
需要增加这个字段Privacy - Photo Library Additions Usage Description
三:适配预估时间
目前预估2.5个工作日左右