web-dev-qa-db-fra.com

Auto-dimensionnement des masques par programme vs 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 à l'utilisation de UIViewAutoresizingFlexibleLeftMargin code interne, etc.

Donc, j’avais l’habitude de penser selon cet instantané: enter image description here

Plus tard dans la journée, j’ai dû faire des vérifications et j’ai trébuché sur ce fil.

Et également la documentation Apple, intitulée avec la section intitulée "Gestion des modifications de disposition à l'aide de règles de redimensionnement automatique" dans ce lien: https://developer.Apple.com/library/content/ documentation/WindowsViews/Conceptual/ViewPG_iPhone_OS/ CreatingViews/CreatingViews.html

J'ai donc maintenant un concept renouvelé dans mon esprit quant à la manière dont la définition par programmation des masques serait équivalente aux paramètres xib:

Scénario 1: Régler uniquement (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) équivaut à:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

En XIB?

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

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

En XIB?

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

216
Raj Pawan Gumdal

Oui, Interface Builder l'a "inversé" dans un sens (ou UIView, selon votre apparence). Vos "scénarios" cités sont corrects.

35
DarkDust

Oui, vous avez cité les choses correctement. De plus, je conviens que cela semble un peu à l’arrière, c’est pourquoi j’apprécie votre message.

Vous voudrez peut-être utiliser une macro de préprocesseur UIViewAutoresizingFlexibleMargins pour rendre une marge UIView flexible dans tous les sens. J'ai mis cela dans le fichier d'en-tête précompilé afin qu'il soit inclus partout.

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

Utiliser UIViewAutoresizingFlexibleMargins fera un élément d'interface utilisateur rester centré car il ne sera pas étreindre tout un côté. Pour que l'élément grossisse/diminue avec son parent, définissez respectivement UIViewAutoresizingFlexibleWidth et UIViewAutoresizingFlexibleHeight

J'aime utiliser UIViewAutoresizingFlexibleMargins car je peux le référencer ultérieurement comme:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

au lieu de

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

Très souvent, je vois ces marges OU ensemble sur une ligne, comme dans l'exemple ci-dessus. Juste difficile à lire.

47
Sam

Swift 4 Utilisez ceci

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

Objectif c

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
0
Muhammad Nayab

 enter image description here

Activer 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 strut) rendra ce côté inflexible/non flexible.

L'activation de la ligne gauche externe (jambe gauche)} n'est pas équivalente à l'activation de UIViewAutoresizingFlexibleRightMargin. A la place, UIViewAutoresizingFlexibleRightMargin = on si la jambe de force est désactivée, off si la jambe de droite est activée.

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