导航栏的高度的适配
iOS 11以前,状态栏statusBar的高度是20,底部tabbar的高度是49。
iOS 11之后,状态栏的statusBar的高度变成了44, 底部的tabbar变成了83
所以建议还是抽取成宏。
安全区域的问题
iOS 11之前, automaticallyadjustsscrollviewinsets经常被设置成NO,由开发者去控制处理留白和坐标问题。
iOS 11后,把这个automaticallyadjustsscrollviewinsets废弃,新增了contentInsetAdjustmentBehavior,它是个枚举类型的值,我们只需要把其设置成never就行了
tableview的组头和组尾高度变大问题
我们需要在初始化的把这三属性设置成0即可( estimatedRowHeight、 estimatedSectionHeaderHeight estimatedSectionFooterHeight)
导航栏标题titleview的问题
iOS 11中会出现蜷缩成一起的现象 不过它现在支持autolayout。所以我们需要把它扩展出去, 只需要在你自定义的titleview中实现
- (CGSize)intrinsicContentSize {
return UILayoutFittingExpandedSize;
}
定位相关
问题描述:无法定位,而且程序在安装后第一次访问定位权限时,无定位权限提示对话框弹出。
原因:iOS11 定位相关的权限做了更改,在iOS11上使用了新的定位权限key。
解决方案:
如果原来申请的权限是始终允许NSLocationAlwaysUsageDescription,那么需要在保留原来的key的基础上增加NSLocationWhenInUseUsageDescription和NSLocationAlwaysAndWhenInUsageDescription。
具体参考另篇博客:http://blog.csdn.net/dangyalingengjia/article/details/77965029
系统相册相关
问题描述:iOS11上读写相册的照片时发生崩溃。
原因:由于相册相关权限的key发生了变化。用户在没有权限的情况下,访问相册导致崩溃。
解决方案:
iOS11之前相册对应的key是NSPhotoLibraryUsageDescription,iOS11对应的Key是NSPhotoLibraryAddUsageDescription。同定位的Key一样,由于key没有兼容性,所以需要保留原key以兼容iOS10及之前版本。
关于UIScrollView初始位置变化的问题
由于iOS11废弃了UIViewController的automaticallyAdjustsScrollViewInsets属性,位置需要手动调整。
iOS11中为UIScrollView新增了contentInsetAdjustmentBehavior属性,结合UIAppearance协议,可以统一在appDelegate的didFinishLaunchingWithOptions的最开始增加:
if #available(iOS 11.0, *) {
UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
}
注意
如果你需要做一个嵌套WebView的画面,直接将WebView加到self.view中时,那就需要对WebView的ScrollView进行单独处理:
UIScrollView.appearance().contentInsetAdjustmentBehavior = .automatic
对于系统的相册选择视图UIImagePickerController,需要单独处理:
再打开系统相册前设定:
UIScrollView.appearance().contentInsetAdjustmentBehavior = .automatic
从相册返回后设定:
UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
第三方库WKWebViewJavascriptBridge
问题描述:在WKWebView的回调函数中崩溃:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
原因:WKWebViewJavascriptBridge内部逻辑问题
解决方案:WKWebViewJavascriptBridge最新的6.0.2上仍然没有解决这个问题,可以参考github issue#272
只能手动修改源文件,将WKWebViewJavascriptBridge.m 的L153的if改为 else if
修改后: 修改前:
UIVisualEffectView相关的崩溃
iOS11之前可以将UIView直接加到(addSubview)UIVisualEffectView上面,但是在iOS11上面这么做会导致crash。
正确的姿势是:将UIViewaddSubview到UIVisualEffectView的contentView上。
关于上传商店相关改变
之前没有1024*1024的icon,同样可以提交商店审核,但是现在不行了。你会在用Application Loader上传完成后收到一个warning,但是在提交审核(包括beta测试版本)时被告知不允许提交。
`
而且注意,这个1024的图片一定要去掉alpha通道。可以在github上搜索Alpha-Channel-Remover,用这个工具去掉alpha通道。
iPhone X机型判断
目前还不知道iPhone X的Devive Model,可以拿分辨率来判断。
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125,
2436), [[UIScreen mainScreen] currentMode].size) : NO)
Color适配
iPhone X支持P3色彩空间,从而产生更丰富,比sRGB更饱和的颜色。
+(UIColor*)colorWithDisplayP3Red:(CGFloat)displayP3Red
green:(CGFloat)green
blue:(CGFloat)blue
alpha:(CGFloat)alpha
NS_AVAILABLE_IOS(10_0);
-(UIColor*)initWithDisplayP3Red:(CGFloat)displayP3Red
green:(CGFloat)green
blue:(CGFloat)blue
alpha:(CGFloat)alpha
NS_AVAILABLE_IOS(10_0);