iOS 11 de la zone de sécurité guide de présentation de rétro-compatibilité
Est l'activation de la Zone de Sécurité repères de Mise en page compatible pour iOS en dessous de 11?
- Le premier Google a frappé pour la "zone de sécurité guide de présentation de l'" est useyourloaf.com/blog/safe-area-layout-guide, où il est affirmé que "... vous pouvez passer à l'utilisation de la zone de sécurité guide de présentation de l'Interface du Générateur de même si vous avez encore de la cible iOS 10 ans et plus."
- Est-il une raison particulière de le tag de la question avec [iphone-x] ?
- Je pense que je sais pourquoi, sur iPhoneX, un tabBar vis sans safeareaInsets
- Si votre Déploiement Cible est définie à rien sous iOS 9.0, Xcode, vous donnera une erreur que de la Zone de Sécurité repères de Mise en page ne sont pas pris en charge.
- Est-il a été en charge de la zone de sécurité et prend en charge iOS 8? im penser à ajouter par programmation à tous les écrans.
- Malheureusement, même si apple dit que la Zone de Sécurité est compatible sur la table de montage séquentiel, il ne l'est pas vraiment et gâchera votre disposition sur ios 9 et 10 appareils. Il y a un radr bug pour cela. Fondamentalement, avec la zone de sécurité activée, il y aura un 20 pts espace vide en haut de tous vos points de vue sur ios 9 et 10.
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à travailler avec la nouvelle Zone de Sécurité repères de mise en page et de maintenir la compatibilité avec iOS 9 et iOS 10:
(EDIT: comme l'a souligné dans les commentaires de @NickEntin, cette mise en œuvre présumer qu'il y a une barre d'état présents, ce qui ne sera pas vrai dans le paysage sur l'iPhone X. Résultant de l'espace vers le haut (20 points). Il fonctionnera parfaitement bien cependant.
E. g. si vous voulez une vue à 10 points en dessous de la barre d'état (et 10 points en dessous du boîtier du capteur de l'iPhone X):
File Inspector
et permettre à la sécurité en vérifiantUse Safe Area Layout Guides
.>=
(supérieur ou égal) contrainte constante30
(30 parce que nous voulons 10 espacement des points de la barre d'état, qui est de 20 points de haut) et la prioritéHigh
(750).=
(égalité) de la contrainte, de la constante10
et la prioritéLow
(250).La même chose peut être fait pour une vue en bas (et pour avant/après ou gauche/droite de la Zone de Sécurité):
File Inspector
et permettre à la sécurité en vérifiantUse Safe Area Layout Guides
.>=
(supérieur ou égal) contrainte constante10
et la prioritéHigh
(750).=
(égalité) de la contrainte, de la constante10
et la prioritéLow
(250).La rétro-compatibilité des Zones de Sécurité pour iOS 9 & iOS 10 ne fonctionne que si vous utilisez des story-boards. Si vous utilisez xibs, il n'existe pas de guide de présentation de retomber.
https://forums.developer.apple.com/thread/87329
Les solutions semblent être, soit
(a) la migration de votre xibs dans les storyboards, ou
(b) ajouter des contraintes de la programmation.
Si (un) n'est pas vraiment une option, l'approche manuelle sera quelque chose comme ceci:
En supposant que vous avez un point de vue dans votre xib que vous voulez garder à l'intérieur de la zone de sécurité (c'est à dire en dessous de tout barre de statut la barre de navigation).
Ajouter des contraintes dans votre xib entre votre point de vue et de la zone de sécurité pour iOS 11. Céder la première contrainte à une priorité de 750.
Dans votre vue-contrôleur, ajouter une propriété:
Puis dans viewDidLayoutSubviews:
La nouvelle contrainte est créé uniquement pour iOS 9 & iOS 10, a une priorité par défaut de 1000, et remplace celle du xib.
Répétez l'opération pour un fond de contrainte si vous avez besoin pour éviter la maison de l'indicateur.
Swift 4 version:
NSLayoutConstraint
qui le rend plus pratique à utiliser car rien ne doit être mis en œuvre dans chaque viewcontroller où vous pouvez utiliser à la xib. c'est à la fin de ce post: stackoverflow.com/a/52145680/4181169viewDidLayoutSubviews
au lieu deviewDidLoad
?layoutSubviews
qui devraient passer en premier. Je pense queviewDidLoad
est également OK en fonction de ce que vous faites.Il y a certainement au moins un problème de rétro-compatibilité avec iOS 11 de la zone de sécurité des contraintes que j'ai observé dans Xcode 9 GM--poussé à la vue des contrôleurs de sécurité de la zone de contraintes.
Si votre barre de navigation est caché et que vous appuyez sur une zone de sécurité de haut contraint de vue, la poussée de la vue de chevauchement de la barre d'état sur iOS 9 & 10.
Si la barre de navigation est visible, et "sous les barres du haut" handicapé", la poussée de la vue encore jusqu'à glisser sous la barre de navigation pour arriver en haut de l'écran. La barre de navigation est placé correctement.
Sur iOS 11, la mise en page est correcte dans les deux cas.
Voici un exemple simple: http://www.filedropper.com/foobar
Et voici une vidéo de w/nav bar caché (iOS 10.3 sur la gauche, iOS 11 sur la droite): https://vimeo.com/234174841/1e27a96a87
Voici une version où la barre de navigation visible (activé par la plume):
https://vimeo.com/234316256/f022132d57
J'ai déposé à ce que le Radar #34477706.
Grâce à @Sander pour souligner la barre de navigation visible cas.
Si vous utilisez xibs sans storyboard puis ils n'ont pas de repères de mise en page sur ios 10. Ainsi, passer xib au storyboard d'avoir des raisons de compatibilité descendante.
Oui, votre projet/de l'application fonctionnera sous iOS versions antérieures à iOS 11 sans aucun problème. Dans les versions d'iOS avant le 11, il remplace/estime de la Zone de Sécurité Mise en forme automatique et suit des Règles de Haut et le Bas guide de présentation de l'.
J'ai testé mon projet existant avec et sans 'SafeAreaLayout" sur les deux plates-formes (iOS 11 et arrière iOS 10). Ça fonctionne très bien.
Voici un exemple de capture instantanée avec raison, Par l'activation ou la désactivation de la Zone de Sécurité de mise en page, n'aura pas d'effet sur la conception existante.
De La Zone De Sécurité Mise En Page:
Mise en page automatique
J'ai été en utilisant ce en Objective-C avec de bons résultats pour iOS 10.
Dans le cas où vous utilisez SafeArea dans votre xib ensuite, vous pouvez ajouter dans votre
viewDidLoad
:"zone de sécurité guide de présentation de l'" est rétro-compatible. Eh bien, à moins que vous l'utilisez dans xib. Avec storyboard, cela semble ok.
J'ai résolu mon problème en accédant à "Top contrainte de mise en page" de l'objet premier en haut de mon point de vue.
puis, j'ai changé la valeur de la Constante pour que la contrainte et actualiser l'affichage. Par exemple, si vous utilisez une barre de navigation (44 hauteur) en plus de la barre d'état (20 hauteur) :
Avec SYSTEM_VERSION_LESS_THAN qui est définie ainsi :
J'ai trouvé un moyen plus pratique d'où vous avez seulement besoin de sous-classe, les
NSLayoutConstraint
qui est épinglé à votresafeArea
.C'est un peu hacky depuis que vous avez à obtenir le ViewController à partir d'une UIView, mais à mon avis, c'est un moyen facile et une bonne alternative en attendant qu'Apple corrige enfin une compatibilité descendante pour les safeArea dans Xibs.
Sous-classe:
Xib:
J'ai des problèmes de compatibilité descendante avec WKWebView & de la Zone de Sécurité sur iOS 9.
Par une raison quelconque, WKWebView ignore simplement la zone de sécurité paramètres de mise en page.
En Objective-C pour le haut et le bas de la marge quand sur iPhone-X
Voici ce que j'ai fait avec mes Projets
Dans mon cas, mes deux
topConstraint
etbottomConstraint
s sont@IBOutlet
s. C'est aussi compatible pouriOS 8
.Ma configuration initiale pour le haut et le bas, les contraintes sont pour l'iphone, ce qui est pourquoi je suis seule édition de contraintes pour l'iPhone X
.
REMARQUE:
self.view
est votre superView c'est pourquoi je l'utilise poursafeAreaInsets
Lorsque vous avez un générique ViewController que tous vos ViewControllers étendre, une autre solution serait de placer les éléments qui doivent être ajustées dans un IBOutletCollection et de les ajuster par programmation dans ce GenericViewController. Voici mon code :
Voici mon iOS 9 pour iOS 11+ solution wrapper dans swift 4+