適配iOS11以及 iPhone X 之 網(wǎng)利寶App

Xcode 9 GM 已經(jīng)可以下載了 作為 iOS 開發(fā) 豈能不抓緊適配iOS11 以及有齊劉海的 iPhone X 來保住飯碗呢 哈哈哈哈

文章目錄

  • 適配 iOS 11
    • MJRefreshHeader 漏出馬腳
    • TableView 滑不到最底部
  • 適配 iOS X
    • 啟動圖設(shè)置
    • Tabbar 出現(xiàn)透明懸浮
    • 出現(xiàn)導航欄不明線條(這個是導航欄高度變化導致的問題)

一 首先來適配 iOS 11

image.png
image.png

問題一 : 自定義的頭部刷新在自然情況下也會漏出一些馬腳

問題一 分析:

來看一下蘋果的官方 API

@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets 
API_DEPRECATED_WITH_REPLACEMENT("Use UIScrollView's contentInsetAdjustmentBehavior instead", ios(7.0,11.0),tvos(7.0,11.0)); // Defaults to YES

可以看到automaticallyAdjustsScrollViewInsets這個屬性的說明在 iOS11中被廢棄了 要使用contentInsetAdjustmentBehavior這個屬性去代替 所以當ableview的frame超出了安全區(qū)域后系統(tǒng)會自動的調(diào)整SafeAreaInsets的值,而iOS 11中真正影響tableview內(nèi)容與邊緣的變成了adjustedContentInset而不是以前的contentInset。 由于系統(tǒng)對adjustedContentInset進行了調(diào)整導致了tableView的內(nèi)容到邊緣的距離發(fā)生了變化,下移距離分別是20pt(沒有navigationBar,下移了一個statusBar的高度),64pt(navigationBar的高度以及statusBar的高度)。

問題一 解決
代碼實現(xiàn)

    if (@available(iOS 11.0, *)) {
        self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    } else {
        self.viewController.automaticallyAdjustsScrollViewInsets = NO;
    }

可以簡單粗暴的直接判斷版本已進行適配不同 API 就可以了
contentInsetAdjustmentBehavior 意思是讓adjustContentInset值不受SafeAreaInset值的影響。

至于安全區(qū)域的概念也是 iOS11 剛提出來的 可以參考這篇文章騰訊開放平臺: iOS11適配安全區(qū)域

image.png

問題二

可以看到圖片 TableView 滑不到最底部

問題二分析

也是涉及到安全區(qū)域騰訊開放平臺: iOS11適配安全區(qū)域

如果你的APP中使用的是自定義的navigationbar,隱藏掉系統(tǒng)的navigationbar,并且tableView的frame為(0,0,SCREEN_WIDTH, SCREEN_HEIGHT)開始,那么系統(tǒng)會自動調(diào)整SafeAreaInsets值為(20,0,0,0),如果使用了系統(tǒng)的navigationbar,那么SafeAreaInsets值為(64,0,0,0),如果也使用了系統(tǒng)的tabbar,那么SafeAreaInsets值為(64,0,49,0)。

問題二 解決

       UIEdgeInsets edges = UIEdgeInsetsMake(0, 0, 64, 0);
        tableView.contentInset = edges;
        tableView.scrollIndicatorInsets = edges;

二 接著來適配 iPhone X

image.png

問題一

APP 的內(nèi)容并沒有充滿整個屏幕

問題一 分析

其實這個問題我們之前可能就碰見過 那就是 如果啟動圖尺寸配置的不正確的話 內(nèi)容都會比屏幕尺寸小

問題一 解決
準備一張尺寸:1125 * 2436的啟動圖片, 移動到LaunchImage的Finder目錄中, 并在LaunchImage中的Contents.json文件中增加 (注意Json格式):

{

    "extent" : "full-screen",

    "idiom" : "iphone",

    "subtype" : "2436h",

    "filename" : "圖片名字.png",

    "minimum-system-version" : "11.0",

    "orientation" : "portrait",

    "scale" : "3x"

}

image.png

問題二

導航欄出現(xiàn)不明線條

問題二分析
先看一下設(shè)置導航條背景色 的代碼

// 此方法內(nèi)部是返回一個高度為64的 漸進色  
    UIColor *color = [UIColor colorWithTopColor:WLBHexColor(@"005CCC") bottomColor:WLBHexColor(@"006ADB") height:NAVIGATION_HEIGHT];
    self.navigationController.navigationBar.barTintColor = color;

看到代碼應(yīng)該就知道是 NAVIGATION_HEIGHT = 64這個高度的問題了

因為iPhone X的StatusBar高度有所改變
在其他型號的iPhone上StatusBar是20
在iPhone X上StatusBar的高度是44,

所以原本的20(StatusBar)+44(NavBar) = 64 如今變成了如今的44(StatusBar) + 44(NavBar) = 88;

問題二解決方案

// 判斷是否是 iPhone X 的宏
    #define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

    UIColor *color = [UIColor colorWithTopColor:WLBHexColor(@"005CCC") bottomColor:WLBHexColor(@"006ADB") height:iPhoneX ? NAV_BAR_HEIGHT + 24 : NAV_BAR_HEIGHT];
    self.navigationController.navigationBar.barTintColor = color;

問題三

tabbar 出現(xiàn)懸浮狀態(tài)

問題三分析

是因為沒有設(shè)置下邊這句代碼導致的
self.tabBar.translucent = NO;
這句表示取消tabBar的透明效果。

蘋果官方文檔解釋:

UINavigationBar/UITabBar的translucent屬性解釋:默認為YES,可以通過設(shè)置NO來強制使用非透明背景,如果導航條使用自定義背景圖片,那么默認情況該屬性的值由圖片的alpha(透明度)決定,如果alpha的透明度小于1.0值為YES。如果手動設(shè)置translucent為YES并且使用自定義不透明圖片,那么會自動設(shè)置系統(tǒng)透明度(小于1.0)在這個圖片上。如果手動設(shè)置translucent為NO并且使用自定義帶透明度(透明度小于0)的圖片,那么系統(tǒng)會展示這張背景圖片,只不過這張圖片會使用事先確定的barTintColor進行不透明處理,若barTintColor為空,則會使用UIBarStyleBlack(黑色)或者UIBarStyleDefault(白色)。
設(shè)置導航欄背景圖片透明度問題

如果背景圖片沒有透明度,系統(tǒng)會自動把導航控制器的棧頂控制器的view的Y值增加64,如果沒有透明度,則不會增加。
這一情況的圖片必須是imageSet格式的,并且圖片的透明度為1(不透明),系統(tǒng)才會去調(diào)整。

問題三解決
如問題分析所示
在 UITabbarController 中添加以下代碼

self.tabBar.translucent = NO;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容