導航欄的高度的適配
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
修改后:????????????????????????修改前:
WKWebView
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);