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.).
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);
UIViewAutoResizingMask
s 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 .