152 votes

Zone de sécurité de Xcode 9

Tout en explorant Xcode9 Bêta Trouvé de la Zone de Sécurité sur l'Interface des constructeurs d'Afficher la hiérarchie de la visionneuse. Suis curieuse et a essayé de savoir à propos de la Zone de Sécurité sur les Pommes de documentation, dans les gist le doc a dit "Le de la zone d'affichage qui interagit directement avec mise en page Automatique" , Mais il ne me satisfait pas, je veux savoir l'utilisation Pratique de cette nouvelle chose.

Faire l'un des indices?

enter image description here

Paragraphe de Conclusion d'Apple doc pour la zone de Sécurité.

Le UILayoutGuide classe est conçu pour effectuer toutes les tâches effectuées auparavant par les factice points de vue, mais de le faire dans un endroit plus sûr, plus efficace. Repères de mise en page ne sont pas définir un nouveau point de vue. Ils ne participent pas à la vue de la hiérarchie. Au lieu de cela, ils suffit simplement de définir une zone rectangulaire en leur possession d'affichage du système de coordonnées qui peuvent interagir avec Mise en page Automatique.

290voto

Krunal Points 33551

De la Zone de sécurité est un guide de présentation de l' (Zone de Sécurité Guide de Présentation).
Le guide de présentation de l'représente la partie de votre point de vue qui n'est pas caché par les bars et d'autres contenus. Dans iOS 11+, Apple est déconseiller le haut et le bas repères de mise en page et de les remplacer par une seule zone de sécurité guide de présentation de l'.

Lorsque la vue est visible à l'écran, ce guide reflète la partie de la vue qui n'est pas couvert par d'autres. La zone de sécurité d'un point de vue reflète la superficie couverte par les barres de navigation barres d'onglets, barres d'outils, et d'autres ancêtres qui masquent la vue du contrôleur de vue. (En tvOS, de la zone de sécurité intègre l'écran de la lunette, tel que défini par l' overscanCompensationInsets de la propriété de UIScreen.) Il couvre également un espace supplémentaire défini par le point de vue du contrôleur additionalSafeAreaInsets de la propriété. Si la vue n'est pas actuellement installé en vue de la hiérarchie, ou n'est pas encore visible à l'écran, la mise en page du guide correspond aux bords de la vue.

Pour le point de vue du contrôleur de vue de la racine, de la zone de sécurité dans cette propriété représente la partie entière de la vue du contrôleur de contenu qui est obscurci, et tous les autres encarts que vous avez spécifié. Pour d'autres points de vue dans la vue de la hiérarchie, de la zone de sécurité ne reflète que la partie de la vue est obscurcie. Par exemple, si une vue est entièrement à l'intérieur de la zone de sécurité de son point de vue du contrôleur de vue de la racine, le bord des encarts dans cette propriété sont à 0.

Selon Apple, Xcode 9 - note de Version
Interface Builder utilise UIView.safeAreaLayoutGuide comme un remplacement pour le obsolète en Haut et en Bas repères de mise en page dans UIViewController. Pour utiliser la nouvelle zone de sécurité, sélectionnez la Zone de Sécurité repères de Mise en page dans le Fichier inspecteur pour l'affichage de la télécommande, puis ajouter des contraintes entre votre contenu et la nouvelle zone de sécurité ancres. Cela empêche votre contenu d'être obscurci par les barres supérieure et inférieure, et par l'overscan région sur tvOS. Les contraintes de la zone de sécurité sont convertis en Haut et en Bas lors du déploiement de versions antérieures d'iOS.

enter image description here


Ici est simple référence à une comparaison (pour prendre effet visuel similaire) entre l'existant (Haut & Bas) Guide de Présentation et de la Zone de Sécurité Guide de Présentation de l'.

De La Zone De Sécurité Mise En Page: enter image description here

Mise en page automatique

enter image description here


Comment travailler avec la Sécurité de la Zone de Mise en page?

Suivez ces étapes pour trouver solution:

  • Activer l'option "Zone de Sécurité Mise en page', si ce n'est activé.
  • Supprimer toute contrainte " si l'on montre la connexion avec avec Super vue et ré-attacher tous les sécurité de mise en page d'ancrage. OU Double-cliquez sur une contrainte et modifier la connexion de super vue de SafeArea d'ancrage

Voici un exemple de capture instantanée, comment faire pour activer la zone de sécurité de mise en page et de modifier contrainte.

enter image description here

Ici est le résultat de changements ci-dessus

enter image description here


Conception de mise en page avec SafeArea
Lors de la conception pour l'iPhone X, vous devez vous assurer que les mises en page de remplir l'écran et ne sont pas masquées par le dispositif de coins arrondis, capteur de logement, ou de l'indicateur pour accéder à l'écran d'Accueil.

enter image description here

La plupart des applications qui utilisent le standard, fourni par le système des éléments d'INTERFACE utilisateur, comme les barres de navigation, les tableaux et les collections s'adaptent automatiquement à l'appareil du nouveau facteur de forme. Documents de référence, étendre les bords de l'écran et les éléments de l'INTERFACE utilisateur sont correctement encadré et placé.

enter image description here

Pour les applications avec des mises en page personnalisées, en soutenant l'iPhone X devrait également être relativement facile, surtout si votre application utilise la Mise en page Automatique et adhère à la zone de sécurité et de la marge repères de mise en page.

enter image description here


Voici un exemple de code (Réf à partir de: Zone de Sécurité Guide de Présentation):
Si vous créez vos contraintes dans le code de la safeAreaLayoutGuide propriété de UIView pour obtenir pertinents de la mise en page des ancres. Nous allons recréer l'Interface ci-dessus Builder exemple dans le code pour voir à quoi il ressemble:

En supposant que nous avons le vert vue comme une propriété de notre point de vue contrôleur:

private let greenView = UIView()

On pourrait avoir une fonction pour définir les points de vue et contraintes appelé à partir de viewDidLoad:

private func setupView() {
  greenView.translatesAutoresizingMaskIntoConstraints = false
  greenView.backgroundColor = .green
  view.addSubview(greenView)
}

Créer de l'attaque et de fuite de la marge des contraintes comme toujours à l'aide de la layoutMarginsGuide de la vue racine:

 let margins = view.layoutMarginsGuide
    NSLayoutConstraint.activate([
      greenView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),
      greenView.trailingAnchor.constraint(equalTo: margins.trailingAnchor)
 ])

Maintenant, à moins que vous ciblez iOS 11 seulement vous devez envelopper la zone de sécurité guide de présentation de contraintes avec #disponible et de revenir au haut et au bas repères de mise en page pour les précédentes versions iOS:

if #available(iOS 11, *) {
  let guide = view.safeAreaLayoutGuide
  NSLayoutConstraint.activate([
   greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),
   guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)
   ])

} else {
   let standardSpacing: CGFloat = 8.0
   NSLayoutConstraint.activate([
   greenView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: standardSpacing),
   bottomLayoutGuide.topAnchor.constraint(equalTo: greenView.bottomAnchor, constant: standardSpacing)
   ])
}


Résultat:

enter image description here


Suivant UIView extension, il est facile pour vous de travailler avec SafeAreaLayout par programmation.

extension UIView {

  // Top Anchor
  var safeAreaTopAnchor: NSLayoutYAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.topAnchor
    } else {
      return self.topAnchor
    }
  }

  // Bottom Anchor
  var safeAreaBottomAnchor: NSLayoutYAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.bottomAnchor
    } else {
      return self.bottomAnchor
    }
  }

  // Left Anchor
  var safeAreaLeftAnchor: NSLayoutXAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.leftAnchor
    } else {
      return self.leftAnchor
    }
  }

  // Right Anchor
  var safeAreaRightAnchor: NSLayoutXAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.rightAnchor
    } else {
      return self.rightAnchor
    }
  }

}

Voici un exemple de code en Objective-C:


Voici des Développeurs d'Apple, la Documentation Officielle pour la Zone de Sécurité Guide de Présentation de l'


De la Zone de sécurité est nécessaire pour gérer la conception de l'interface utilisateur pour iPhone-X. Voici des directives de base pour Comment la conception de l'interface utilisateur pour iPhone-X à l'aide de la Zone de Sécurité de Mise en page

20voto

NicolasMiari Points 2687

Je veux parler de quelque chose qui m'a surpris la première fois quand j'essayais d'adapter un SpriteKit application basée à éviter les bords arrondis et le "cran" de la nouvelle iPhone X, comme le suggère la dernière Human Interface Guidelines: La nouvelle propriété safeAreaLayoutGuide de UIView doit être interrogé après le point de vue a été ajouté à la hiérarchie (par exemple, sur -viewDidAppear:) afin de déclarer une disposition pertinente de cadre (sinon, elle retourne la taille de l'écran).

De la propriété de la documentation:

Le guide de présentation de l'représente la partie de votre point de vue qui est n'est pas caché par les bars et d'autres contenus. Lorsque la vue est visible à l'écran, ce guide reflète la partie de la vue qui n'est pas couvert par les barres de navigation barres d'onglets, les barres d'outils, et d'autres ancêtre points de vue. (En tvOS, de la zone de sécurité reflète la zone ne relevant pas de l'écran de la lunette.) Si la vue n'est pas actuellement installé en vue de la hiérarchie, ou n'est pas encore visible à l'écran, le guide de présentation de l'bords sont égaux aux bords de la vue.

(l'emphase est mienne)

Si vous l'avez lu dès -viewDidLoad:, l' layoutFrame de ce guide sera {{0, 0}, {375, 812}} à la place de l' {{0, 44}, {375, 734}}

18voto

Jack Points 4771

enter image description here

  • Plus tôt dans iOS 7.0–11.0 <Obsolète> UIKit utilise le topLayoutGuide & bottomLayoutGuide qui est - UIView de la propriété
  • iOS11+ utilise safeAreaLayoutGuide qui est aussi UIView de la propriété

  • Activer la Zone de Sécurité Guide de Présentation de case à cocher à partir d'un fichier de l'inspecteur.

  • Zones de sécurité vous aider à placer vos points de vue au sein de la partie visible de l'ensemble de l'interface.

  • Dans tvOS, de la zone de sécurité comprend également l'écran de numérisation des encarts, qui représentent la zone visée par l'écran de la lunette.

  • safeAreaLayoutGuide correspondent à la partie de la vue qui n'est pas couvert par les barres de navigation barres d'onglets, barres d'outils, et d'autres ancêtre viewss.
  • Utilisation de zones de sécurité comme une aide à la présentation de votre contenu, comme l' UIButton etc.

  • Lors de la conception pour l'iPhone X, vous devez vous assurer que les mises en page de remplir l'écran et ne sont pas masquées par le dispositif de coins arrondis, capteur de logement, ou de l'indicateur pour accéder à l'écran d'Accueil.

  • Assurez-vous que les milieux d'étendre les bords de l'écran, et que le défilement vertical mises en page, comme les tableaux et les collections, continuer tout le chemin vers le bas.

  • La barre d'état est plus grand sur l'iPhone X que sur d'autres iPhones. Si votre application suppose un statut fixe hauteur de la barre pour le positionnement, le contenu en dessous de la barre d'état, vous devez mettre à jour votre application pour positionner dynamiquement du contenu basé sur le périphérique de l'utilisateur. Notez que la barre d'état sur l'iPhone X ne change pas la hauteur lors de tâches en arrière-plan, comme l'enregistrement de la voix et la localisation sont actifs print(UIApplication.shared.statusBarFrame.height)//44 for iPhone X, 20 for other iPhones

  • La hauteur de la maison de l'indicateur de conteneur est de 34 points.

  • Une fois que vous activez la Zone de Sécurité Guide de Présentation de l' , vous pouvez voir la zone de sécurité des contraintes de propriété figurant dans interface builder.

enter image description here

Vous pouvez définir des contraintes respectives de l' self.view.safeAreaLayoutGuide comme

ObjC:

  self.demoView.translatesAutoresizingMaskIntoConstraints = NO;
    UILayoutGuide * guide = self.view.safeAreaLayoutGuide;
    [self.demoView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor].active = YES;
    [self.demoView.trailingAnchor constraintEqualToAnchor:guide.trailingAnchor].active = YES;
    [self.demoView.topAnchor constraintEqualToAnchor:guide.topAnchor].active = YES;
    [self.demoView.bottomAnchor constraintEqualToAnchor:guide.bottomAnchor].active = YES;

Swift:

   demoView.translatesAutoresizingMaskIntoConstraints = false
        if #available(iOS 11.0, *) {
            let guide = self.view.safeAreaLayoutGuide
            demoView.trailingAnchor.constraint(equalTo: guide.trailingAnchor).isActive = true
            demoView.leadingAnchor.constraint(equalTo: guide.leadingAnchor).isActive = true
            demoView.bottomAnchor.constraint(equalTo: guide.bottomAnchor).isActive = true
            demoView.topAnchor.constraint(equalTo: guide.topAnchor).isActive = true
        } else {
            NSLayoutConstraint(item: demoView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
            NSLayoutConstraint(item: demoView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
            NSLayoutConstraint(item: demoView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
            NSLayoutConstraint(item: demoView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
        }

enter image description here

enter image description here

enter image description here

8voto

kamesh Points 196

Apple a introduit topLayoutGuide et bottomLayoutGuide en tant que propriétés de UIViewController dans iOS 7. Ils vous permettaient de créer des contraintes pour que votre contenu ne soit pas masqué par les barres UIKit, telles que l'état, la navigation ou la barre d'onglets. Ces guides de présentation sont obsolètes dans iOS 11 et remplacés par un guide de présentation unique pour les zones sûres.

Reportez - vous au lien pour plus d'informations.

5voto

Yannick Points 1867

La Zone de Sécurité Guide de Présentation de l'aide à éviter les underlapping Système d'éléments de l'INTERFACE utilisateur lors du positionnement, le contenu et les contrôles.

La Zone de Sécurité est la zone située entre l'INTERFACE utilisateur du Système les éléments qui sont à la Barre d'État, Barre de Navigation et la Barre d'outils ou la Barre d'Onglet. Ainsi, lorsque vous ajoutez une barre d'État de votre application, de la Zone de Sécurité rétractable. Lorsque vous ajoutez une Barre de Navigation à votre application, de la Zone de Sécurité se rétracte à nouveau.

Sur l'iPhone X, de la Zone de Sécurité fournit d'autres encart du haut et du bas bords de l'écran en mode portrait, même lorsque aucune barre n'est montré. Dans le paysage, de la Zone de Sécurité est en retrait de l'côtés des écrans et la maison de l'indicateur.

Ceci est pris à partir de Apple video de Conception pour l'iPhone X , où ils ont également visualiser la manière dont les différents éléments ont une incidence sur la Zone de Sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X