Lors de l'exploration de la version bêta de Xcode9, une zone de sécurité a été trouvée sur les constructeurs d'interface. Affichez la visionneuse de hiérarchie. Je suis curieux et j'ai essayé de connaître la documentation de Safe Area on Apples, dans l'essentiel le doc dit "La zone de vue qui interagit directement avec la mise en page automatique" Mais cela ne m'a pas satisfait, je veux savoir l'utilisation pratique de cette nouvelle chose.
Quelqu'un a-t-il une idée?
Paragraphe de conclusion du document Apple pour la zone sûre.
La classe UILayoutGuide est conçue pour exécuter toutes les tâches précédemment effectuées par les vues factices, mais pour le faire de manière plus sûre et plus efficace. Les guides de mise en page ne définissent pas de nouvelle vue. Ils ne participent pas à la hiérarchie des vues. Au lieu de cela, ils définissent simplement une région rectangulaire dans le système de coordonnées de leur propre vue qui peut interagir avec la disposition automatique.
Réponses:
Lorsque la vue est visible à l'écran, ce guide reflète la partie de la vue qui n'est pas couverte par d'autres contenus. La zone de sécurité d'une vue reflète la zone couverte par les barres de navigation, les barres d'onglets, les barres d'outils et d'autres ancêtres qui obscurcissent la vue d'un contrôleur de vue. (Dans tvOS, la zone de sécurité incorpore le cadre de l'écran, tel que défini par la
overscanCompensationInsets
propriété d'UIScreen.) Elle couvre également tout espace supplémentaire défini par laadditionalSafeAreaInsets
propriété du contrôleur de vue . Si la vue n'est pas actuellement installée dans une hiérarchie de vues, ou n'est pas encore visible à l'écran, le guide de disposition correspond toujours aux bords de la vue.Pour la vue racine du contrôleur de vue, la zone de sécurité de cette propriété représente la partie entière du contenu du contrôleur de vue qui est masquée, ainsi que tous les encarts supplémentaires que vous avez spécifiés. Pour les autres vues de la hiérarchie de vues, la zone de sécurité reflète uniquement la partie de cette vue qui est masquée. Par exemple, si une vue se trouve entièrement dans la zone de sécurité de la vue racine de son contrôleur de vue, les inserts d'arête dans cette propriété sont 0.
Voici une simple référence à titre de comparaison (pour créer un effet visuel similaire) entre le guide de disposition (haut et bas) existant et le guide de disposition de zone de sécurité.
Disposition de la zone de sécurité:
Mise en page automatique
Comment travailler avec la disposition de zone sûre?
Suivez ces étapes pour trouver une solution:
Voici un exemple d'instantané, comment activer la disposition de la zone de sécurité et modifier la contrainte.
Voici le résultat des changements ci-dessus
Conception de la mise en page avec SafeArea
Lors de la conception pour iPhone X, vous devez vous assurer que les mises en page remplissent l'écran et ne sont pas masquées par les coins arrondis de l'appareil, le boîtier du capteur ou l'indicateur d'accès à l'écran d'accueil.
La plupart des applications qui utilisent des éléments d'interface utilisateur standard fournis par le système, tels que les barres de navigation, les tableaux et les collections, s'adaptent automatiquement au nouveau facteur de forme de l'appareil. Les matériaux d'arrière-plan s'étendent jusqu'aux bords de l'affichage et les éléments de l'interface utilisateur sont correctement incrustés et positionnés.
Pour les applications avec des mises en page personnalisées, la prise en charge de l'iPhone X devrait également être relativement simple, surtout si votre application utilise la mise en page automatique et adhère aux guides de mise en page des zones de sécurité et des marges.
Voici un exemple de code (Réf. De: Safe Area Layout Guide ) :
Si vous créez vos contraintes dans le code, utilisez la propriété safeAreaLayoutGuide de UIView pour obtenir les ancres de disposition appropriées. Recréons l'exemple d'Interface Builder ci-dessus dans le code pour voir à quoi il ressemble:
En supposant que nous ayons la vue verte en tant que propriété dans notre contrôleur de vue:
Nous pourrions avoir une fonction pour configurer les vues et les contraintes appelées depuis viewDidLoad:
Créez les contraintes de marge de début et de fin comme toujours à l'aide du layoutMarginsGuide de la vue racine:
Maintenant, à moins que vous ne cibliez uniquement iOS 11, vous devrez encapsuler les contraintes du guide de mise en page de la zone de sécurité avec #available et revenir aux guides de mise en page supérieur et inférieur pour les versions antérieures d'iOS:
Résultat:
Suite à l'
UIView
extension, simplifiez-vous l'utilisation de SafeAreaLayout par programme.Voici un exemple de code en Objective-C :
Voici la documentation officielle des développeurs Apple pour le guide de disposition des zones de sécurité
La zone de sécurité est requise pour gérer la conception de l'interface utilisateur pour iPhone-X. Voici les directives de base pour concevoir une interface utilisateur pour iPhone-X à l'aide de la disposition de la zone de sécurité
la source
margins
etview.leadingAnchor
: lorsque vous utilisezlet margins = view.layoutMarginsGuide
et une utilisation ultérieuremargins.leadingAnchor
, vous contraignez la vue aux marges de la vue. Cela ajoutera un peu d'espace supplémentaire sur les côtés. Si vous ne voulez pas cela, utilisez simplementview.leadingAnchor
etview.trailingAnchor
et vous ne verrez aucun espace blanc à gauche ou à droite ...Je veux mentionner quelque chose qui m'a surpris en premier lorsque j'essayais d'adapter une application basée sur SpriteKit pour éviter les bords arrondis et l '«encoche» du nouvel iPhone X, comme suggéré par les dernières directives de l'interface humaine : La nouvelle propriété
safeAreaLayoutGuide
deUIView
doit être interrogé après que la vue a été ajoutée à la hiérarchie (par exemple, sur-viewDidAppear:
) afin de signaler un cadre de mise en page significatif (sinon, il renvoie simplement la taille plein écran).De la documentation de la propriété:
(c'est moi qui souligne)
Si vous le lisez dès le début
-viewDidLoad:
, lelayoutFrame
du guide sera{{0, 0}, {375, 812}}
au lieu du prévu{{0, 44}, {375, 734}}
la source
UIKit
utilise le topLayoutGuide & bottomLayoutGuide qui est laUIView
propriétéiOS11 + utilise safeAreaLayoutGuide qui est également la
UIView
propriétéActivez la case à cocher Guide de disposition de la zone de sécurité dans l'inspecteur de fichiers.
Les zones sûres vous aident à placer vos vues dans la partie visible de l'interface globale.
Dans tvOS , la zone de sécurité comprend également les encarts de surbalayage de l'écran, qui représentent la zone couverte par le cadre de l'écran.
Utilisez des zones sûres pour vous aider à présenter votre contenu comme
UIButton
etc.Lors de la conception pour iPhone X, vous devez vous assurer que les mises en page remplissent l'écran et ne sont pas masquées par les coins arrondis de l'appareil, le boîtier du capteur ou l'indicateur d'accès à l'écran d'accueil.
Assurez-vous que les arrière-plans s'étendent jusqu'aux bords de l'écran et que les dispositions à défilement vertical, telles que les tableaux et les collections, continuent jusqu'en bas.
La barre d'état est plus haute sur iPhone X que sur les autres iPhones. Si votre application suppose une hauteur de barre d'état fixe pour positionner le contenu sous la barre d'état, vous devez mettre à jour votre application pour positionner dynamiquement le contenu en fonction de l'appareil de l'utilisateur. Notez que la barre d'état sur l'iPhone X ne change pas de hauteur lorsque des tâches d'arrière-plan telles que l'enregistrement vocal et le suivi de l'emplacement sont actives
print(UIApplication.shared.statusBarFrame.height)//44 for iPhone X, 20 for other iPhones
La hauteur du conteneur d'indicateur de domicile est de 34 points.
Une fois que vous avez activé le Guide de disposition de la zone de sécurité, vous pouvez voir la propriété des contraintes de zone de sécurité répertoriée dans le générateur d'interface.
Vous pouvez définir des contraintes avec respectivement
self.view.safeAreaLayoutGuide
as-ObjC:
Rapide:
la source
Apple a présenté topLayoutGuide et bottomLayoutGuide en tant que propriétés d'UIViewController dans iOS 7. Ils vous permettaient de créer des contraintes pour empêcher votre contenu d'être masqué par les barres UIKit telles que l'état, la navigation ou la barre d'onglets. Ces guides de mise en page sont obsolètes dans iOS 11 et remplacés par un seul guide de mise en page de zone de sécurité.
Reportez - vous au lien pour plus d'informations.
la source
La zone de sécurité est la zone située entre les éléments de l'interface utilisateur du système qui sont la barre d'état, la barre de navigation et la barre d'outils ou la barre d'onglets. Ainsi, lorsque vous ajoutez une barre d'état à votre application, la zone de sécurité se réduit. Lorsque vous ajoutez une barre de navigation à votre application, la zone de sécurité se réduit à nouveau.
Sur l'iPhone X, la zone de sécurité fournit un encart supplémentaire à partir des bords supérieur et inférieur de l'écran en portrait, même lorsqu'aucune barre n'est affichée. En mode paysage, la zone de sécurité est insérée à partir des côtés des écrans et de l'indicateur d'accueil.
Ceci est tiré de la vidéo d'Apple Designing for iPhone X où ils visualisent également comment différents éléments affectent la zone de sécurité.
la source