2017-10-13 5 views
0

J'ai une application, qui n'a pas de UINavigationController et qui a un UICollectionView avec des cellules comme source. Pour éviter que les cellules n'apparaissent derrière la barre d'état, j'ai ajouté un UIView derrière.Ajouter UIView derrière la barre d'état de l'iPhone X

Avant iPhone X il était assez simple pour ce faire, comme ce qui suit:

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) 

Ce faisant, une petite couche blanche apparaît derrière elle comme prévu.

(cette méthode d'ancrage provient d'une extension, pas de langue par défaut).

Comment puis-je obtenir ceci pour iPhone X?

Jusqu'à présent, j'essayé le code suivant:

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) 
    } 

} 

mais il ne fonctionne pas.

Quelle est la meilleure approche dans ce cas?

Merci

Répondre

2

Vous devez dire à votre CollectionView pour ajuster EISN:

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

Cela fera que votre contenu sera assez incrustée de sorte qu'il est ne coïncide pas avec la barre d'état de l'iPhone X.

+0

Merci, je ne connaissais pas cette propriété. –

+0

De rien. Si j'ai répondu à votre question, vous pouvez envisager de la définir comme réponse. –