52 votes

Lors du débogage de l'autolayout, quelle est la signification des chaînes de masque autoresizing telles que h = - & v = - & -?

Je suppose qu'ils doivent se référer au modèle des jambes de force et des ressorts mais je ne trouve aucune mention d'eux. Lorsque vous NSLog contrainte, ils apparaissent parfois comme la chaîne de description de la classe non documentée NSAutoresizingMaskLayoutConstraint . J'ai remarqué au moins 3 types différents: h=--- , h=--& , h=-&- version horizontale et verticale.

Ils se présentent souvent lors du débogage de mises en page contraintes.

107voto

jrturton Points 64875

Si vous spécifiez d'un redimensionnement automatique des masques au lieu de contraintes, ou spécifiez pas de contraintes à tous, puis l'affichage ont NSAutoResizingMaskLayoutConstraint contraintes par opposition à NSLayoutConstraints. Si vous définissez translatesAutoresizingMasksIntoConstraints de NO, alors que ces contraintes n'apparaissent pas. Vous ne pouvez pas mélanger et match sur une seule vue, ou que vous obtenez unsatisfiable contrainte erreurs.

J'ai mis en place un test rapide du projet avec les différentes combinaisons de d'un redimensionnement automatique des masques et le format d'enregistrement est assez simple.

  • h= ou v= indique que nous parlons de contraintes dans le sens horizontal ou vertical.
  • - indique une taille fixe
  • & indique une taille souple
  • L'ordre des symboles représente la marge, de la dimension, de la marge

Par conséquent, h=&-& signifie que vous avez flexible marges gauche et droite et une largeur fixe, v=-&- fixes marges supérieure et inférieure et flexible de la hauteur, et ainsi de suite.

3voto

jmstone Points 4550

Si vous regardez la vidéo de la WWDC 2012 sur les meilleures pratiques pour maîtriser la mise en page automatique, le présentateur mentionne qu'il s'agit de la syntaxe des vues qui utilisent des masques de redimensionnement automatique et des contraintes NOT. Il n'y a pas de format visuel associé à ceux-ci comme il en existe pour NSLayoutConstraint.

3voto

Daniel Loughney Points 71

L'ajout de jrturton réponse, la meilleure information que j'ai trouvé pour comprendre la contrainte de descriptions, c'est le Format Visuel de la Langue de la documentation que vous avez besoin pour créer des contraintes dans le code. La langue est documenté comme une grammaire formelle ainsi, il peut prendre une minute pour absorber tout cela.

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html#//apple_ref/doc/uid/TP40010853-CH3-SW1

Vous donner un exemple:

<NSLayoutConstraint:0x10ada8a70 H:|-(44)-[UIButton:0x10ac5dc30]   (Names: '|':UIView:0x10ac60470)>

C'est une Orientation Horizontale contrainte (H:) Le lien est de 44 pixels à partir d'un superview (|) à la une UIButton Le nommé superview est une UIView (les Noms: '|':UIView:) - important de savoir parce que vous n'avez pas besoin d'être freinée par l'immédiat superview

Les valeurs hexadécimales sont toutes les adresses valides de vos éléments d'INTERFACE utilisateur. Quand vous point d'arrêt sur toutes les exceptions et pause sur le conflit de contraintes, vous pouvez utiliser l'adresse postale de voir l'objet de la contrainte. Dans mon cas:

(lldb) po 0x10ac5dc30
<UIButton: 0x10ac5dc30; frame = (44 199; 30 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x10ac5ddf0>>

(lldb) po 0x10ac60470
<UIView: 0x10ac60470; frame = (0 64; 320 504); autoresize = RM+BM; animations = { position=<CABasicAnimation: 0x10ac5ec70>; bounds=<CABasicAnimation: 0x10ac62250>; }; layer = <CALayer: 0x10ac60530>>

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