2017-10-13 143 views
0

我有一個應用程序,它沒有UINavigationController,它有一個UICollectionView,其中有一些單元格作爲其源。在iPhone X狀態欄後面添加UIView

爲避免單元出現在狀態欄的後面,我在其後面添加了一個UIView

iPhone X之前,它是非常簡單的做到這一點,如下所示:

let v = UIView() 
v.backgroundColor = .white 
view.addSubview(v) 
v.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 0, paddinfLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 20) 

通過這樣做,一個微小的白色層將顯示它背後如預期。

(此錨定方法來自擴展,而不是語言默認)。

我怎樣才能達到這個iPhone X

到目前爲止,我嘗試下面的代碼:

if #available(iOS 11, *) { 
    v.anchor(top: view.safeAreaLayoutGuide.topAnchor, left: view.safeAreaLayoutGuide.leftAnchor, bottom: nil, right: view.safeAreaLayoutGuide.rightAnchor, paddingTop: 0, paddinfLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 20) 

    let window = UIWindow(frame: UIScreen.main.bounds) 
    print("window.safeAreaInsets.top:", window.safeAreaInsets.top) 
    if window.safeAreaInsets.top > CGFloat(0.0) { 
     print("iPhone X") 
     v.anchor(top: view.safeAreaLayoutGuide.topAnchor, left: view.safeAreaLayoutGuide.leftAnchor, bottom: nil, right: view.safeAreaLayoutGuide.rightAnchor, paddingTop:-44, paddinfLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: window.safeAreaInsets.top) 
    } else { 
     v.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 0, paddinfLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 20) 
    } 

} 

,但它不工作。

這種情況下最好的方法是什麼?

謝謝

回答

2

你必須告訴你的CollectionView調整插圖:

if #available(iOS 11, *) { 
    collectionView.contentInsetAdjustmentBehavior = .scrollableAxes 
} 

這將確保您的內容將足夠的插圖,所以它不是由iPhone X的狀態欄重疊。

+0

謝謝,不知道屬性。 –

+0

不客氣。如果我回答了您的問題,那麼您可以考慮將其設置爲已回答。 –