Obtenez des hauteurs de fond et de fond en zone protégée

Sur le nouvel iPhone X, quelle serait la meilleure façon d’atteindre la hauteur maximale et minimale des zones dangereuses?

entrer la description de l'image ici

Essaye ça :

En objective c

if (@available(iOS 11.0, *)) { UIWindow *window = UIApplication.sharedApplication.keyWindow; CGFloat topPadding = window.safeAreaInsets.top; CGFloat bottomPadding = window.safeAreaInsets.bottom; } 

En swift

 if #available(iOS 11.0, *) { let window = UIApplication.shared.keyWindow let topPadding = window?.safeAreaInsets.top let bottomPadding = window?.safeAreaInsets.bottom } 

Pour obtenir la hauteur entre les guides de mise en page, faites simplement

 let guide = view.safeAreaLayoutGuide let height = guide.layoutFrame.size.height 

Donc full frame height = 812.0 , safe area height = 734.0

Ci-dessous, l’exemple où la vue verte a un cadre de guide.layoutFrame

entrer la description de l'image ici

Swift 4

Pour simplement épingler une vue à une ancre de zone de sécurité à l’aide de contraintes, vous pouvez le faire à tout moment du cycle de vie du contrôleur de vue, car les contraintes sont gérées par l’API de présentation automatique en arrière-plan. Cependant, pour accéder aux valeurs de ces zones sûres afin de déterminer leur hauteur, il faut attendre plus tard dans le cycle de vie du contrôleur de vue, idéalement viewDidLayoutSubviews() .

Cela se twig sur n’importe quel contrôleur de vue:

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() var topSafeArea: CGFloat var bottomSafeArea: CGFloat if #available(iOS 11.0, *) { topSafeArea = view.safeAreaInsets.top bottomSafeArea = view.safeAreaInsets.bottom } else { topSafeArea = topLayoutGuide.length bottomSafeArea = bottomLayoutGuide.length } // safe area values are now available to use } 

Je préfère cette méthode à la sortie de la fenêtre, principalement à cause de l’encapsulation – il n’est pas nécessaire de référencer des objects superflus comme la fenêtre quand tout est déjà dans le contrôleur de vue – et parce que c’est comme ça qu’Apple veut que nous le fassions depuis UIKit ajouté ces valeurs en tant que propriété de la vue elle-même (dans iOS 11) pour que nous puissions y accéder.