web-dev-qa-db-fra.com

Qu'est-ce que "Contraindre à la marge" dans Storyboard dans Xcode 6

Je travaille avec autolayout et des contraintes et j'ai trouvé qu'il existe une option Constrain to margins dans Xcode 6 qui n'était pas présente dans Xcode 5 et est cochée par défaut.

J'ai créé un projet de test, puis j'ai ajouté un UITableView sur un ViewController avec le cadre défini à la même taille que la vue et ajouté des contraintes.

Xcode 6 Vous pouvez voir ici même si tableview a le même cadre que celui-ci. Xcode suggère d’ajouter -16 comme contrainte, alors que Xcode 5 suggère d’ajouter un espacement 0.

With Constrain to margin checked

Désormais, lorsque vous décochez l'option "Contraindre à la marge", elle se comporte de la même façon que Xcode 5 et suggérerait d'ajouter 0 comme contrainte.

With Constrain to margin UnChecked

En outre, j'ai constaté qu'une fois que j'ajoutais une contrainte avec Constrain à la marge vérifiée, je ne pouvais plus ouvrir le fichier de scénario dans Xcode 5; c'est donc définitivement une nouveauté dans Xcode 6.

J'espère pouvoir expliquer ma question correctement. Je voudrais comprendre ce que "contraindre à la marge" fait réellement et quand je devrais et ne devrais pas l'utiliser. Je m'excuse si c'est quelque chose de très simple et évident.

EDIT

J'ai trouvé quelque chose à propos des marges de mise en page dans discussion ici , je me demande si c'est lié à cela.

247
Bhumit Mehta

Je ne comprends pas du tout pourquoi les gens se plaignent que " Les marges provoqueraient un crash total sur tout ce qui était antérieur à iOS 8. "

Définir vos contraintes relatives à la marge dans un fichier xib ou un storyboard NE FAUT PAS faire planter votre application sur iOS7, et il NE FAUT PAS faire une différence d'interface utilisateur sur votre appareil iOS7 non plus, comme tant que vous ne touchez pas les propriétés UIView.layoutMargins et UIView.preservesSuperviewLayoutMargins dans votre code.

Qu'est-ce que les marges dans iOS8?

Les marges de présentation représentent le remplissage autour de intérieur d'un UIView que le système de présentation peut utiliser lors de la présentation de sous-vues - afin de garantir qu'un espace est laissé entre le bord d'une vue et une sous-vue. À cet égard, cela ressemble beaucoup à la propriété de remplissage associée aux blocs en CSS.

enter image description here

Par défaut, une UIView a des marges de format de 8 points de chaque côté, qui ne peuvent pas être modifiées dans Interface Builder. Toutefois, en définissant la propriété UIView.layoutMargins dans le code, disponible uniquement sur iOS8, vous pouvez ajuster ces valeurs.

Vous pouvez demander à IB d’afficher les marges avec Editeur> Canevas> Afficher les rectangles de présentation: enter image description here

Les marges peuvent être utilisées pour aider à organiser vos vues et sous-vues. Chaque UIView est livré avec des marges par défaut, mais elles n'affectent le placement de la vue que lorsque vous définissez une contrainte liée à une marge.

Comment utiliser les marges

La seule façon d'utiliser les marges dans Interface Builder consiste à cocher l'option relative à la marge lors de la configuration de vos contraintes. Voici comment vous dirigez votre contrainte vers Utilisez des marges au lieu d'arêtes lors de la présentation de la vue.

enter image description here

Examinons quatre manières différentes de définir une contrainte principale entre une vue et sa sous-vue. Pour chaque contrainte, nous examinons le la première association décrite sera celle de la sous-vue, et la la seconde sera celle de superview. Ce que vous voulez accorder une attention particulière est la vérification et la désactivation du statut de l'option Relative à la marge de chaque extrémité de contrainte, car cela définit si la contrainte est liée à la marge ou au bord de la vue.

  1. Premier élément (décocher), deuxième élément (cocher): Dans ce cas, nous déclarons que le bord gauche de cette sous-vue doit s'aligner sur la marge gauche de la vue supérieure (comme illustré dans cette image).

enter image description here

  1. Premier élément (décochez), deuxième élément (décochez): Les deux en utilisant Edge, not margin. Dans ce cas, nous déclarons que le bord gauche de cette sous-vue doit s'aligner sur le bord gauche de Superview.

enter image description here

  1. Premier élément (cocher), deuxième élément (désélectionner): Dans ce cas, nous déclarons que la marge gauche de cette sous-vue doit être alignée sur le bord gauche de la super vue. Ce type de disposition fait en fait que la sous-vue chevauche la super vue.

enter image description here

  1. Premier élément (chèque), deuxième élément (chèque). Cela a en fait le même effet que dans le cas 2, car les deux vues secondaire et supérieure ont la même marge par défaut. Nous déclarons que la marge gauche de cette sous-vue doit s'aligner sur la marge gauche de Superview.

enter image description here

Qu'est-ce qui est bien dans les marges?

Cette nouvelle fonctionnalité (iOS8) ne concerne le développement de l'interface utilisateur que si vous décidez d'utiliser des marges.

En utilisant les marges, vous pouvez ajuster le placement de plusieurs sous-vues partageant une relation commune avec un super aperçu partagé en modifiant la valeur d'une propriété unique. Ceci est une victoire évidente pour la définition de toutes les contraintes associées avec des valeurs fixes, car si vous devez mettre à jour tout l'espacement, au lieu de modifier chaque valeur une à une, vous pouvez simultanément modifier tous les emplacements pertinents en mettant à jour la marge de la vue supérieure avec une seule ligne. code comme celui-ci:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

Pour illustrer cet avantage, dans le cas suivant, tous les bords gauche des sous-vues sont alignés sur la marge gauche de leur vue supérieure. Ainsi, le changement de la marge gauche de Superview affectera toutes les sous-vues en même temps.

enter image description here

308
Scott Zhu

Dans iOS 8, vous avez maintenant la possibilité de définir vos contraintes relatives à une marge prédéfinie par rapport aux limites du super aperçu, au lieu des limites du supérieur même. Oui, cela est totalement lié aux marges de mise en page que vous avez indiquées dans la documentation. L'un des avantages est que vous pouvez redéfinir vos marges de manière dynamique ou différemment pour chaque type de périphérique. La mise en page est mise à jour en conséquence sans modification des contraintes.

Quand l'utiliser: quand vous voulez profiter de cette nouvelle flexibilité.

Quand ne PAS l'utiliser: pour toute application destinée à s'exécuter sur iOS 7 ou version ultérieure.

63
KPM

La propriété sur UIView est: layoutMargins. Voir le Apple Docs . Fondamentalement, si les marges de mise en page sont 8,8,8,8 (valeur par défaut), une contrainte avec 0 espace de début pour la marge de conteneur aura une position x de 8. Notez que cette option est uniquement disponible. sur iOS8 ou ultérieur.

Pour tous ceux qui ne veulent pas que leurs contraintes aillent dans la marge du conteneur:

CTRL + clic + glisser pour afficher la fenêtre contextuelle de création de contrainte.

Si le menu indique par défaut de créer la contrainte à la marge, maintenez la touche option/alt enfoncée pour permettre à la contrainte d'être appliquée au conteneur et non à sa marge.

Maintenant, il va montrer l'option pour créer la contrainte PAS à la marge. C'est COMME plus rapide dans mon utilisation.

42
Kyle Robson