Lors du débogage de autolayout, quelle est la signification des chaînes de masque de ré-autorisa- tion 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 de ceux-ci. Lorsque vous NSLog contrainte NSLog , elles 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=-&- avec la version horizontale et verticale.

Ils se présentent souvent lors du débogage sur des mises en page limitées.

Si vous spécifiez des masques à modification automatique au lieu de contraintes, ou ne spécifiez aucune contrainte, la vue aura des contraintes NSAutoResizingMaskLayoutConstraint par opposition à NSLayoutConstraints. Si vous définissez translatesAutoresizingMaskIntoConstraints sur NO , ces contraintes n’apparaissent pas. Vous ne pouvez pas combiner et correspondre sur une seule vue, ou vous obtenez des erreurs de contrainte insatisfaisantes.

J’ai mis en place un projet de test rapide avec diverses combinaisons de masques de ré-auto-numérisation et le format de consignation est assez simple.

  • h= ou v= indique que nous parlons de contraintes dans la direction horizontale ou verticale.
  • - indique une taille fixe
  • & indique une taille flexible
  • L’ordre des symboles représente la marge, la dimension, la marge

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

Si vous regardez la vidéo WWDC 2012 sur les meilleures pratiques pour la maîsortingse de la mise en forme automatique, vous y trouverez une section dans laquelle le présentateur mentionne qu’il s’agit de la syntaxe des vues qui utilisent des masques de personnalisation automatique et non des contraintes. Il n’y a pas de format visuel associé à ceux-ci, comme c’est le cas pour NSLayoutConstraint.

Ajoutant à la réponse de jrturton, la meilleure information que j’ai trouvée pour comprendre les descriptions de contraintes est la documentation de Visual Format Language dont vous avez besoin pour créer des contraintes dans le code. La langue est documentée comme une grammaire formelle, il faut donc une minute pour tout absorber.

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

Donnez-vous un exemple:

  

Il s’agit d’une contrainte d’orientation horizontale ( H 🙂 La liaison est de 44 pixels d’une superview ( | ) à un UIButton La superview nommée est une UIView ( noms: ‘|’: UIView:) – important de savoir que vous n’avez pas besoin être contraint par la superview immédiate

Les valeurs hexadécimales sont toutes les adresses valides de vos éléments d’interface utilisateur. Lorsque vous définissez un point d’arrêt sur toutes les exceptions et que vous vous arrêtez sur le conflit de contraintes, vous pouvez utiliser l’adresse po pour voir l’object de la contrainte. Dans mon cas:

 (lldb) po 0x10ac5dc30 > (lldb) po 0x10ac60470 ; bounds=; }; layer = >