導(dǎo)航欄的高度的適配
iOS 11以前,狀態(tài)欄statusBar的高度是20,底部tabbar的高度是49。
iOS 11之后,狀態(tài)欄的statusBar的高度變成了44, 底部的tabbar變成了83
所以建議還是抽取成宏。
安全區(qū)域的問(wèn)題
iOS 11之前, automaticallyadjustsscrollviewinsets經(jīng)常被設(shè)置成NO,由開發(fā)者去控制處理留白和坐標(biāo)問(wèn)題。
iOS 11后,把這個(gè)automaticallyadjustsscrollviewinsets廢棄,新增了contentInsetAdjustmentBehavior,它是個(gè)枚舉類型的值,我們只需要把其設(shè)置成never就行了
tableview的組頭和組尾高度變大問(wèn)題
我們需要在初始化的把這三屬性設(shè)置成0即可( estimatedRowHeight、 estimatedSectionHeaderHeight estimatedSectionFooterHeight)
導(dǎo)航欄標(biāo)題titleview的問(wèn)題
iOS 11中會(huì)出現(xiàn)蜷縮成一起的現(xiàn)象 不過(guò)它現(xiàn)在支持autolayout。所以我們需要把它擴(kuò)展出去, 只需要在你自定義的titleview中實(shí)現(xiàn)
- (CGSize)intrinsicContentSize {
return UILayoutFittingExpandedSize;
}
定位相關(guān)
問(wèn)題描述:無(wú)法定位,而且程序在安裝后第一次訪問(wèn)定位權(quán)限時(shí),無(wú)定位權(quán)限提示對(duì)話框彈出。
原因:iOS11 定位相關(guān)的權(quán)限做了更改,在iOS11上使用了新的定位權(quán)限key。
解決方案:
如果原來(lái)申請(qǐng)的權(quán)限是始終允許NSLocationAlwaysUsageDescription,那么需要在保留原來(lái)的key的基礎(chǔ)上增加NSLocationWhenInUseUsageDescription和NSLocationAlwaysAndWhenInUsageDescription。
具體參考另篇博客:http://blog.csdn.net/dangyalingengjia/article/details/77965029
系統(tǒng)相冊(cè)相關(guān)
問(wèn)題描述:iOS11上讀寫相冊(cè)的照片時(shí)發(fā)生崩潰。
原因:由于相冊(cè)相關(guān)權(quán)限的key發(fā)生了變化。用戶在沒(méi)有權(quán)限的情況下,訪問(wèn)相冊(cè)導(dǎo)致崩潰。
解決方案:
iOS11之前相冊(cè)對(duì)應(yīng)的key是NSPhotoLibraryUsageDescription,iOS11對(duì)應(yīng)的Key是NSPhotoLibraryAddUsageDescription。同定位的Key一樣,由于key沒(méi)有兼容性,所以需要保留原key以兼容iOS10及之前版本。
關(guān)于UIScrollView初始位置變化的問(wèn)題
由于iOS11廢棄了UIViewController的automaticallyAdjustsScrollViewInsets屬性,位置需要手動(dòng)調(diào)整。
iOS11中為UIScrollView新增了contentInsetAdjustmentBehavior屬性,結(jié)合UIAppearance協(xié)議,可以統(tǒng)一在appDelegate的didFinishLaunchingWithOptions的最開始增加:
if #available(iOS 11.0, *) {
UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
}
注意
如果你需要做一個(gè)嵌套WebView的畫面,直接將WebView加到self.view中時(shí),那就需要對(duì)WebView的ScrollView進(jìn)行單獨(dú)處理:
UIScrollView.appearance().contentInsetAdjustmentBehavior = .automatic
對(duì)于系統(tǒng)的相冊(cè)選擇視圖UIImagePickerController,需要單獨(dú)處理:
再打開系統(tǒng)相冊(cè)前設(shè)定:
UIScrollView.appearance().contentInsetAdjustmentBehavior = .automatic
從相冊(cè)返回后設(shè)定:
UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
第三方庫(kù)WKWebViewJavascriptBridge
問(wèn)題描述:在WKWebView的回調(diào)函數(shù)中崩潰:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
原因:WKWebViewJavascriptBridge內(nèi)部邏輯問(wèn)題
解決方案:WKWebViewJavascriptBridge最新的6.0.2上仍然沒(méi)有解決這個(gè)問(wèn)題,可以參考github issue#272
只能手動(dòng)修改源文件,將WKWebViewJavascriptBridge.m 的L153的if改為 else if
修改后:????????????????????????修改前:
WKWebView
UIVisualEffectView相關(guān)的崩潰
iOS11之前可以將UIView直接加到(addSubview)UIVisualEffectView上面,但是在iOS11上面這么做會(huì)導(dǎo)致crash。
正確的姿勢(shì)是:將UIViewaddSubview到UIVisualEffectView的contentView上。
關(guān)于上傳商店相關(guān)改變
之前沒(méi)有1024*1024的icon,同樣可以提交商店審核,但是現(xiàn)在不行了。你會(huì)在用Application Loader上傳完成后收到一個(gè)warning,但是在提交審核(包括beta測(cè)試版本)時(shí)被告知不允許提交。
上傳被拒
`
而且注意,這個(gè)1024的圖片一定要去掉alpha通道。可以在github上搜索Alpha-Channel-Remover,用這個(gè)工具去掉alpha通道。
iPhone X機(jī)型判斷
目前還不知道iPhone X的Devive Model,可以拿分辨率來(lái)判斷。
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125,
2436), [[UIScreen mainScreen] currentMode].size) : NO)
Color適配
iPhone X支持P3色彩空間,從而產(chǎn)生更豐富,比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);