Masquage automatique des masques par rapport à Interface Builder / xib / nib

J'étais dans une hypothèse (probablement fausse) que l'activation de l'indicateur de marge de droite dans xib équivaut à utiliser UIViewAutoresizingFlexibleLeftMargin code intérieur et ainsi de suite.

Donc, j'avais l'habitude de penser selon cet instantané: entrez la description de l'image ici

Plus tard aujourd'hui, j'ai dû vérifier, et je suis tombé sur ce fil .

Et aussi la documentation Apple, intitulé avec la section avec le titre – "Gestion des modifications de layout automatiquement en utilisant des règles Autoresizing" dans ce lien: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html

Donc, j'ai maintenant un concept renouvelé dans mon esprit quant à la façon dont le réglage des masques d'autoresizing par programmation serait équivalent aux parameters xib:

Scénario 1 : Le réglage uniquement (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) équivaut à:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

Dans XIB?

Scénario 2 : Définition (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin) dans le code équivaut à:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIVvueAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)

Dans XIB?

Mes 2 scénarios renouvelés sont-ils corrects? Suis-je en ce moment dans ma compréhension?

Oui, Interface Builder l'a "inversé" dans un sens (ou UIView, selon la façon dont vous le regardez). Vos "scénarios" cités sont corrects.

Oui, vous avez cité les choses correctement. De plus, je suis d'accord pour dire que c'est un peu à reculons, alors j'apprécie votre post.

Vous aimeriez peut-être utiliser un préprocesseur Macro UIViewAutoresizingFlexibleMargins pour rendre la marge d'UIView flexible dans toutes les directions. Je l'ai mis dans le file d'en-tête précompilé afin qu'il soit inclus partout.

 #define UIViewAutoresizingFlexibleMargins \ UIViewAutoresizingFlexibleBottomMargin | \ UIViewAutoresizingFlexibleLeftMargin | \ UIViewAutoresizingFlexibleRightMargin | \ UIViewAutoresizingFlexibleTopMargin 

L'utilisation de UIViewAutoresizingFlexibleMargins permet de UIViewAutoresizingFlexibleMargins un élément de l'interface user centré, car il UIViewAutoresizingFlexibleMargins PAS un seul côté. Pour faire croître / rétrécir l'élément avec son parent, définissez respectivement UIViewAutoresizingFlexibleWidth et UIViewAutoresizingFlexibleHeight .

J'aime utiliser UIViewAutoresizingFlexibleMargins parce que je peux le referencer plus tard comme:

 myView.autoresizingMask = UIViewAutoresizingFlexibleMargins; 

au lieu de

 myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin; 

Tout à fait souvent je vois ces marges OR'ed set sur une ligne comme l'exemple ci-dessus. Juste difficile à lire.

entrez la description de l'image ici

L'activation de la flèche verticale / horizontale (appelée ressort) à l'intérieur de la boîte rendra la hauteur / largeur flexible. Mais activer une ligne extérieure (appelée entretoise) rendra ce côté inflexible / non flexible.

L'activation de la ligne extérieure gauche (entretoise gauche) n'équivaut pas à l'activation de UIViewAutoresizingFlexibleRightMargin . Au lieu de cela, UIViewAutoresizingFlexibleRightMargin = UIViewAutoresizingFlexibleRightMargin si la barre droite est désactivée, désactivée si la barre droite est activée.

C'est assez déroutant au début, mais si vous voyez de près, il y a une différence dans les ressorts et les entretoises. Je ne sais pas pourquoi Apple a fait cela, mais pour moi, il y avait des cas où c'était plus facile à utiliser. Et l'utilisation de propriétés opposées dans le code est encore plus confuse.