web-dev-qa-db-fra.com

UIView autoresizingMask - Interface Builder to Code - Créez par programmation des entretoises et des ressorts - Swift ou Objective-C

J'ai présenté quelques sous-vues avec Interface Builder, mais j'aimerais le faire à la place dans le code.

J'ai lu IView docs sur la définition de la propriété view.autoresizingMask. Je cherche une explication logique de la façon de traduire les jambes et les ressorts en utilisant les différents masques proposés (par exemple UIViewAutoresizingFlexibleLeftMargin, etc.).

55
MattyG

Lorsque vous définissez le masque de redimensionnement automatique pour une vue, utilisez un inclusif au niveau du bit OR (|) (Objective-C), ou un tableau (Swift 2, 3) pour spécifier springs et struts.

  • Springs sont représentés en spécifiant un masque (Objective-C ou Swift 3, respectivement):

    • ressort vertical: UIViewAutoresizingFlexibleHeight ou .flexibleHeight

    • ressort horizontal: UIViewAutoresizingFlexibleWidth ou .flexibleWidth

  • Struts sont représentés par l'absence de l'un des quatre masques de `` marge flexible '' (c'est-à-dire que s'il n'existe pas de jambe de force, le masque de cette marge est spécifié):

    • UIViewAutoresizingFlexibleLeftMargin ou .flexibleLeftMargin

    • UIViewAutoresizingFlexibleRightMargin ou .flexibleRightMargin

    • UIViewAutoresizingFlexibleTopMargin ou .flexibleTopMargin

    • UIViewAutoresizingFlexibleBottomMargin ou .flexibleBottomMargin

Par exemple, une vue avec un ressort horizontal et entretoises supérieure et inférieure aurait la largeur et les marges gauche et droite spécifiées comme flexibles:

Swift

mySubview.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin]

Swift 2

mySubview.autoresizingMask = [.FlexibleWidth, .FlexibleLeftMargin, .FlexibleRightMargin]

Swift 1.2

mySubview.autoresizingMask = .FlexibleWidth | .FlexibleLeftMargin | .FlexibleRightMargin

Objectif-C

mySubview.autoresizingMask = (UIViewAutoresizingFlexibleWidth |    
                              UIViewAutoresizingFlexibleLeftMargin |  
                              UIViewAutoresizingFlexibleRightMargin);

enter image description here

127
MattyG

UIViewAutoResizingMasks sont ce que nous appelons des "entretoises" et des "ressorts". Considérez ceci: vous avez un grand carré avec un petit carré à l'intérieur. Pour que ce carré reste parfaitement centré, vous devez définir une largeur fixe à partir de chaque bord intérieur du grand carré, afin de le contraindre. Ce sont des jambes de force.

Les ressorts, en revanche, fonctionnent plus comme un UIView pendant la rotation. Disons que notre vue doit rester en bas de l'écran, alignée au centre (un peu comme un UIToolbar). Nous voulons que son ressort supérieur soit flexible afin que lorsque la vue passe de 460 px à 320 px, il conserve sa même position par rapport aux dimensions désormais modifiées de l'écran. Mettre en surbrillance l'un de ces ressorts dans IB équivaut à définir le UIViewAutoResizingMask approprié et mettre en surbrillance le ressort supérieur en particulier revient à appeler myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin.

Les valeurs peuvent être utilisées en tandem en les enfermant dans une paire de parenthèses et en utilisant un opérateur ou comme myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)

Les masques vous rapportent des nombres car ils sont le type d'un NSUInteger et ce sont les drapeaux qui Apple leur a été attribué. Cmd + cliquez sur l'un pour voir sa définition de méthode .

9
CodaFi