1、啟動(dòng)頁的適配
①使用LaunchImage
如果你使用的是LauchImage加載的啟動(dòng)頁恼五,那么對于他的適配就比較簡單了矿酵,直接在LauchImage中添加一個(gè)1125 * 2436的啟動(dòng)圖片啟動(dòng)頁面即可。
步驟:準(zhǔn)備一張尺寸:1125 * 2436的啟動(dòng)圖片, 將圖片移動(dòng)到項(xiàng)目中/Imagees.xcassets(或者Assets.xcassets)/LaunchImage下的iPhone X Portrait iOS 11+上面沮稚。
注意:將圖片移動(dòng)進(jìn)去之后,在LaunchImage中的Contents.json中會(huì)自動(dòng)生成如下代碼:
{
? ? "extent" : "full-screen",
? ? "idiom" : "iphone",
? ? "subtype" : "2436h",
? ? "filename" : "1125-2436.png(此處為1125 * 2436啟動(dòng)圖片名稱)",
? ? "minimum-system-version" : "11.0",
? ? "orientation" : "portrait",
? ? "scale" : "3x"
}
②使用Launch Screen Storyboard
使用Launch Screen Storyboard 方式來添加的啟動(dòng)頁胰舆,iPhone X 的狀態(tài)欄由原來的 20 變?yōu)榱?44骚露。這個(gè)如果在導(dǎo)航的位置設(shè)置自定義的 View,在 iPhone X 上出問題缚窿。會(huì)擋住 View 的顯示棘幸。所以需要在自定義啟動(dòng)頁的時(shí)候需要專門針對iPhone X做對應(yīng)的配置,需要調(diào)整下 Top 的約束倦零,以前為 -20 误续,改為 -44 ;
2扫茅、iOS11新增版本判斷API
iOS11版本現(xiàn)在有了簡單的API蹋嵌,OC也開始支持swfit的@available語法,就可以不用再手寫判斷iOS版本了葫隙。
if (@available(iOS 11.0, *)) {
// 版本適配
}
3栽烂、訪問相冊權(quán)限變更
iOS11之前:訪問相冊和存儲(chǔ)照片到相冊(讀寫權(quán)限),需要用戶授權(quán)恋脚,需要添加NSPhotoLibraryUsageDescription愕鼓。
iOS11之后:默認(rèn)開啟訪問相冊權(quán)限(讀權(quán)限),無需用戶授權(quán)慧起,無需添加NSPhotoLibraryUsageDescription,適配iOS11之前的還是需要加的册倒。 添加圖片到相冊(寫權(quán)限)蚓挤,需要用戶授權(quán),需要添加NSPhotoLibraryAddUsageDescription驻子。
4灿意、UITableView相關(guān)適配
www.reibang.com/p/73394f7518c8
5、iPhone X導(dǎo)航欄適配
導(dǎo)航欄新增了一種大標(biāo)題樣式崇呵,默認(rèn)設(shè)置是不開啟缤剧,所以不需要修改。
iOS 11以前域慷,導(dǎo)航欄的高度是64荒辕,其中狀態(tài)欄statusBar的高度是20,底部TabBar的高度是49犹褒。
iOS 11之后抵窒,iPhone X導(dǎo)航欄的高度是88,其中狀態(tài)欄statusBar的高度是44叠骑,底部TabBar的高度是83李皇。
iPhoneX的底部增加了虛擬Home區(qū),由于安全區(qū)域的原因默認(rèn)tabBar的高度由49變?yōu)?3宙枷,增高了34掉房,所以自定義的底部TabBar也需要需改其適配方案茧跋。
目前沒發(fā)現(xiàn)有iPhone X的機(jī)型判斷API,建議使用size來做代替判斷卓囚。
#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height
#define kNavBarHeight 44.0
#define kTabBarHeight kStatusBarHeight>20?83:49)
#define kTopHeight (kStatusBarHeight + kNavBarHeight)
#define isiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define iPhoneX [[UIScreen mainScreen] bounds].size.width >= 375.0f && [[UIScreen mainScreen] bounds].size.height >= 812.0f && isiPhone
6瘾杭、安全區(qū)域
iOS 11之前, automaticallyAdjustsScrollViewInsets經(jīng)常被設(shè)置成NO捍岳,由開發(fā)者去控制處理留白和坐標(biāo)問題, 但是iOS?11+ automaticallyAdjustsScrollViewInsets = NO這句代碼失效富寿。
iOS 11后,把這個(gè)automaticallyAdjustsScrollViewInsets廢棄锣夹,新增了contentInsetAdjustmentBehavior页徐,這個(gè)屬性是個(gè)枚舉類型值,我們只需要把其設(shè)置成never就行了
解決TableView偏移88的問題:
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}