Je travaille avec la mise en page automatique et les contraintes et j'ai trouvé qu'il y avait une Constrain to margins
option dans Xcode 6 qui n'était pas présente dans Xcode 5 et qui est vérifié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 la vue suggérée par Xcode pour ajouter -16 comme contrainte tandis que Xcode 5 suggérerait d'ajouter l'espacement 0.
Maintenant, lorsque vous décochez l'option "Contraindre à la marge", elle se comporte comme Xcode 5 et suggère d'ajouter 0 comme contrainte
De plus, j'ai constaté qu'une fois que j'ajoute une contrainte avec Contrainte à la marge vérifiée, je ne suis plus en mesure d'ouvrir le fichier de storyboard dans Xcode 5, donc c'est définitivement quelque chose de nouveau dans Xcode 6
J'espère que je pourrai expliquer ma question correctement. Je voudrais comprendre ce que fait réellement "Contraindre à la marge" et quand je dois et ne dois pas l'utiliser. Je m'excuse si c'est quelque chose de très simple et évident.
ÉDITER
J'ai trouvé quelque chose sur les marges de mise en page dans la discussion ici , je me demande si c'est lié à cela.
la source
Réponses:
Je ne comprends pas du tout pourquoi les gens se plaignent que "les marges provoqueraient un crash brutal sur quoi que ce soit avant iOS 8. "
Qu'est-ce que les marges dans iOS8
Les marges de mise en page représentent un remplissage autour de l' intérieur d'un
UIView
que le système de mise en page peut utiliser lors de la mise en page des sous-vues - pour garantir qu'un espace est laissé entre le bord d'une vue et une sous-vue. À cet égard, elle ressemble beaucoup à la propriété padding associée aux blocs en CSS.Par défaut, a
UIView
a des marges de disposition de 8 points de chaque côté, et cela ne peut pas être modifié dans Interface Builder . Cependant, en définissant laUIView.layoutMargins
propriété dans le code, qui n'est disponible que sur iOS8, vous pouvez ajuster ces valeurs.Les marges peuvent être utilisées pour aider à mettre en page vos vues et sous-vues. Chaque
UIView
sont livrés avec des marges par défaut, mais ils n'affectent le placement de la vue que lorsque vous configurez une contrainte liée à une marge.Comment utiliser les marges
La seule façon d'utiliser les marges dans Interface Builder est de cocher l' option Relatif à la marge lors de la configuration de vos contraintes. C'est ainsi que vous dirigez votre contrainte vers Utiliser des marges plutôt que des bords lors de la présentation de ma vue.
Jetons un œil à quatre façons différentes de configurer une contrainte de tête entre une vue et sa sous-vue. Pour chaque contrainte, nous passons en revue la première association décrite sera le leader de la sous-vue , et la seconde sera le leader de la vue d'ensemble . Vous devez prêter une attention particulière au statut de vérification et de désactivation de l' option Relatif à 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.
Ce qui est bien avec Margins
Cette nouvelle fonctionnalité (iOS8) n'impacte le développement de l'interface utilisateur que si vous décidez d'utiliser des marges.
En utilisant des marges, vous pouvez ajuster le placement de plusieurs sous-vues qui partagent une relation commune avec une vue d'ensemble partagée en modifiant la valeur d'une seule propriété. Il s'agit d'une victoire claire sur la définition de toutes les contraintes associées avec des valeurs fixes, car si vous avez besoin de mettre à jour tout l'espacement, au lieu de changer chaque valeur une par une, vous pouvez simultanément modifier tous les placements pertinents en mettant à jour la marge de la vue d'ensemble avec une seule ligne de code comme celui-ci:
Pour illustrer cet avantage, dans le cas suivant, tous les bords gauches des sous-vues sont alignés sur la marge gauche de leur vue d'ensemble. Ainsi, la modification de la marge gauche de superview affectera toutes les sous-vues en même temps.
la source
Dans iOS 8, vous avez maintenant la possibilité de définir vos contraintes par rapport à une marge prédéfinie aux limites de la vue d'ensemble, au lieu des limites de la vue d'ensemble elles-mêmes. Oui, cela est totalement lié aux marges de mise en page que vous avez indiquées dans les documents. Un avantage est que vous pouvez redéfinir vos marges de manière dynamique ou différente pour chaque type d'appareil, et la disposition sera mise à jour en conséquence sans modifier les contraintes.
Quand l'utiliser: quand vous voulez profiter de cette nouvelle flexibilité.
Quand ne PAS l'utiliser: pour toute application destinée à fonctionner sur iOS 7 ou une version antérieure.
la source
La propriété sur UIView est:
layoutMargins
. Voir les documents Apple . Fondamentalement, si les marges de mise en page sont 8,8,8,8 (par défaut), une contrainte avec 0 espace devant la marge du conteneur aura une position x de 8. Notez que cela n'est disponible que sur iOS8 ou version ultérieure.Pour tous ceux qui ne veulent pas que leurs contraintes passent à la marge du conteneur:
CTRL + clic + glisser pour afficher la fenêtre contextuelle de création de contrainte.
Si le menu affiche pour créer la contrainte à la marge par défaut, maintenez l'option / alt enfoncée pour permettre à la contrainte d'être appliquée au conteneur et non à la marge du conteneur.
Maintenant, il montrera l'option de créer la contrainte PAS à la marge. C'est beaucoup plus rapide dans mon utilisation.
la source