iOS来了一段时间了,每次系统更新,在体验New Feature的同时,我们要做的还有适配,因为我们的App包含iPhone和iPad,所以这里的总结包含了这两种设备的适配!
废话不多说,上干货!
iOS11的判断
#define IOS11OrLater (@available(iOS 11.0, *))
导航栏高度
导航栏高度一直是固定的64P, 到了iOS11这个规则被打破了!84!
iOS11之前
iOS11之后
其次,之前title和titleview是二选一的,在iOS11中可以通过开启
1 |
|
来选择设置大标题
1 |
|
titleView支持autolayout,这要求titleView必须是能够自撑开的或实现了- intrinsicContentSize
1 |
|
tabBar 高度
底部区域主要是iPhoneX与其他机型不一样, 一般机型高度为49, iPhoneX为83;
1 |
|
导航栏返回按钮
之前如果通过某种方式自定义返回按钮,因为API的改变可能导致返回按钮下移
iOS 11之前
1 |
|
iOS 11 中setBackButtonTitlePositionAdjustment:UIOffsetMake没法把按钮移出navigation bar。
解决方法是设置navigationController的backIndicatorImage和backIndicatorTransitionMaskImage
1 |
|
automaticallyAdjustsScrollViewInsets废除
iOS 11中ViewController的automaticallyAdjustsScrollViewInsets属性被废弃了,导致了 一些隐藏了系统导航栏或者自定义导航栏
1 |
|
automaticallyAdjustsScrollViewInsets属性被废弃了,顶部就多了一定的inset
解决方法:
1 |
|
tableview header的问题
iOS 11中如果不实现-tableView: viewForFooterInSection: 和 -tableView: viewForHeaderInSection:,那么-tableView: heightForHeaderInSection:和- tableView: heightForFooterInSection:不会被调用。
这是因为estimatedRowHeight estimatedSectionHeaderHeight estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension,导致高度计算不对,解决方法是实现对应方法或吧这三个属性设为0
tableview新特性
设置delaysContentTouches为NO, 不会立即触发cell的响应事件;
两根手指快速的轻击cell,可以同时选中两个cell进入编辑状态。如果两个手指存在不同步问题,则
会默认识别其中的一个手指表示单选cell;
新增了一个属性separatorInsetReference可以自定义一个cell分割线的边距;
cell或者表头表尾默认采用自适应高度的方案(造成UI紊乱的原因);
增加了numberOfLines属性来实现类似于UILabel一样的高度自适应变化;
获取地理位置权限的问题
在IOS11,原有的NSLocationAlwaysUsageDeion被降级为NSLocationWhenInUseUsageDeion;
需要在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框才会弹出;使用requestAlwaysAuthorization获取权限 IOS11系统弹框会把几种权限级别全部列出,供用户选择;
1 |
|
获取相册权限
iOS11以前:
NSPhotoLibraryUsageDescription:访问相册和存储照片到相册(读写),会出现用户授权;
iOS11之后:
NSPhotoLibraryUsageDescription:无需添加。默认开启访问相册权限(读),无需用户授权;
NSPhotoLibraryAddUsageDescription: 添加内容到相册(写),会出现用户授权;
xib编译问题
一般是打开以前的工程, 编译的时候xib报错, 例如:
warning: Internationalization is not available when compiling for targets before iOS 6.0
解决办法:
选择编译错误的xib文件,找到Builds for 改为iOS 7.0 and Later
iPhone X 屏幕适配
添加iPhoneX的Launch图1125x2436
使用LaunchScreen来当做缓冲页或者修改Assets中的LaunchImage,添加iPhoneX的Launch图1125*2436(竖屏);