iOS11适配

导航栏的高度的适配

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

修改后:                        修改前:

iOS11适配_第1张图片
WKWebView

UIVisualEffectView相关的崩溃

iOS11之前可以将UIView直接加到(addSubview)UIVisualEffectView上面,但是在iOS11上面这么做会导致crash。

正确的姿势是:将UIViewaddSubview到UIVisualEffectView的contentView上。

关于上传商店相关改变

之前没有1024*1024的icon,同样可以提交商店审核,但是现在不行了。你会在用Application Loader上传完成后收到一个warning,但是在提交审核(包括beta测试版本)时被告知不允许提交。
iOS11适配_第2张图片
上传被拒

`

而且注意,这个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);

http://blog.csdn.net/dangyalingengjia/article/details/77964582?utm_source=5ibc.net&utm_medium=referral

http://blog.csdn.net/liqunzhang/article/details/78031641

你可能感兴趣的:(iOS11适配)