iPhoneX簡單適配

灰s發表於2017-12-22

如果想看詳細的iOS11變動,可轉到這篇文章觀看。 iOS11 適配

本文是直接寫出了iPhoneX的相關適配

1. 首先是判斷是否為X

這裡我用的方法比較直接,暫時沒碰到什麼bug,如果各位有更好的方法請指教。

多說一句這裡不能用巨集定義 或者在Swift中不要寫成let dzy_ifX: Bool = Screen_H == 812 ? true : false 這樣定義有時候會出問題,大概是因為Screen_H不同的情況可能會有不同。

let Screen_H = UIScreen.main.bounds.size.height

public var dzy_ifX: Bool {
    if Screen_H == 812 {   
        return true
    }else {
        return false
    }
}
複製程式碼

2. UINavigationBar高度的更改

在老程式碼中,如果是手碼程式設計,相信很多朋友都跟我一樣專案裡面有很多的64這個數字,我是使用了一個變數來代替這個64,在全域性找一下所有的64進行替換 我這個方法並不完善,很明顯在我的專案裡面,我沒有使用到LargeTitle,如果使用到了LargeTitle 這裡就不是8864了,可以自行修改一下。

public var NaviH: CGFloat {
    if Screen_H == 812 {
        return 88
    }else {
        return 64
    }
}
複製程式碼

下面的兩張圖都是iOS11之後多出一個Largetitle的

image.png
image.png

3. UITabbar高度的更改

在iPhoneX中,UITabBar的高度示意圖如下。

image.png
其他的手機中,Tabbar的高度為49,在iPhoneX中,多了一個圓角矩形區域,高度為34
image.png
我所有介面的適配就是按著這個TabBar的樣式來進行適配的。在ViewController中把最下面留出了一個34
image.png
當然了,你也可以根據頁面的具體情況來衡量用不用留這個34

我在所有需要空出這個高度的地方,計算高度的時候都加了一個自定義的變數,如下所示。

public var TabRH: CGFloat {
    if Screen_H == 812 {
        return 34
    }else {
        return 0
    }
}
複製程式碼

4. automaticallyAdjustsScrollViewInsets屬性的棄用

在iOS11中,該屬性已經被棄用,如果有地方用到了這個,需要進行更改。 不過該屬性是UIViewController的 而替代的contentInsetAdjustmentBehavior屬性為UIScrollView的。 具體怎麼修改可以自行考慮。 我只是簡單的給UIViewController做了一個擴充套件,新增了如下方法。

  func dzy_adjustsScrollViewInsets(_ scrollView: UIScrollView? = nil) {
        if #available(iOS 11.0, *) {
            if let scrollView = scrollView {
                scrollView.contentInsetAdjustmentBehavior = .never
            }
        } else {
            automaticallyAdjustsScrollViewInsets = false
        }
    }
複製程式碼

5. 友情提示,iOS11以後介面中間的線不要使用CollectionView的背景色加間隔來做。

比如我這裡,我是用了0.5的間隔加灰色背景做的間隔,就會出現類似下圖的問題。 然後我用白色背景,自己在每個cell裡面加0.5寬度的線依舊會有這類問題。

這張圖是自己手動劃線的截圖

大概的原因是cellframe不是一個整數導致的。像這種一行4個cellcell的寬度根據螢幕寬來計算的,不是整數很正常。 在iOS11之前,也會偶爾有類似的問題,比如你可以去搜一下,iOS UILabel字型模糊,這種關鍵字的文章,講的也都是一個問題。但是在iOS11之後這個問題變得更明顯的,我感受最明顯的就是UICollectionView中用間隔和背景色劃線的方式。 這種問題我所知道的最簡單的處理方式是,用系統自帶的數學函式,把你的View或者Cellfrmae修改成整數的。類似下面這樣,我使用的是floor函式 :

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        switch indexPath.section {
        case 0:
            return CGSize(width: Screen_W, height: UI_H(150))
        case 3:
            return CGSize(width: Screen_W, height: UI_H(85))
        default:
            return CGSize(width: floor(Screen_W / 4.0), height: floor(UI_H(75)))
        }
    }
複製程式碼

如果你對各種數學函式有興趣,可以跳轉我的另一篇文章

iOS 各種數學公式

相關文章