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. "
La définition de vos contraintes par rapport à la marge dans un fichier xib ou un storyboard ne fait pas planter votre application sur iOS7, et cela ne fait pas non plus de différence d'interface utilisateur sur votre appareil iOS7, tant que vous ne touchez pas aux propriétés UIView.layoutMargins
et UIView.preservesSuperviewLayoutMargins
dans votre code.
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 la UIView.layoutMargins
propriété dans le code, qui n'est disponible que sur iOS8, vous pouvez ajuster ces valeurs.
Vous pouvez demander à IB d'afficher les marges avec Editeur> Canevas> Afficher les rectangles de disposition:
Les marges peuvent être utilisées pour aider à mettre en page vos vues et sous-vues. ChaqueUIView
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.
- Premier élément (décocher), deuxième élément (vérifier): dans ce cas, nous déclarons que le bord gauche de la sous-vue doit s'aligner sur la marge gauche de la vue d'ensemble (comme indiqué dans cette image).
- Premier élément (décocher), deuxième élément (décocher): les deux utilisent le bord, pas la marge . Dans ce cas, nous déclarons que le bord gauche de la sous-vue doit s'aligner sur le bord gauche de la vue d'ensemble.
- Premier élément (vérifier), deuxième élément (décocher): dans ce cas, nous déclarons que la marge gauche de la sous-vue doit s'aligner sur le bord gauche de la vue d'ensemble. Ce type de disposition fait que la sous-vue chevauche la vue d'ensemble.
- Premier article (chèque), deuxième article (chèque). Cela a en fait le même effet que le cas 2, car la sous-vue et la vue d'ensemble ont la même marge par défaut. Nous déclarons que la marge gauche de subview doit s'aligner sur la marge gauche de superview.
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:
self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);
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.