webentwicklung-frage-antwort-db.com.de

UIView autoresizingMask - Interface Builder to Code - Programmatische Erstellung von Federbeinen und Federn - Swift oder Objective-C

Ich habe einige Unteransichten mit Interface Builder erstellt, möchte diese jedoch im Code ausführen.

Ich habe die IView docs zum Festlegen der view.autoresizingMask-Eigenschaft gelesen. Ich suche nach einer logischen Erklärung, wie die Federbeine und Federn mit den verschiedenen angebotenen Masken (z. B. UIViewAutoresizingFlexibleLeftMargin usw.) übersetzt werden.

55
MattyG

Wenn Sie die Autoresizing-Maske für eine Ansicht festlegen, verwenden Sie bitweise einschließlich OR (|) (Ziel-C) oder ein Array (Swift 2, 3), um Federn und Streben anzugeben.

  • Federn werden durch Angabe einer Maske dargestellt (Objective-C bzw. Swift 3):

    • vertikale Feder: UIViewAutoresizingFlexibleHeight oder .flexibleHeight

    • horizontale Feder: UIViewAutoresizingFlexibleWidth oder .flexibleWidth

  • Streben werden durch das Fehlen einer der vier "flexiblen Rand" -Masken dargestellt (d. H., Wenn keine Strebe vorhanden ist, wird die Maske für diesen Rand angegeben):

    • UIViewAutoresizingFlexibleLeftMargin oder .flexibleLeftMargin

    • UIViewAutoresizingFlexibleRightMargin oder .flexibleRightMargin

    • UIViewAutoresizingFlexibleTopMargin oder .flexibleTopMargin

    • UIViewAutoresizingFlexibleBottomMargin oder .flexibleBottomMargin

Zum Beispiel eine Ansicht mit einer horizontalen Feder und oberen und unteren Streben Die Breite und der linke und rechte Rand werden als flexibel angegeben:

Swift

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

Swift 2

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

Swift 1.2

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

Ziel-C

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

enter image description here

127
MattyG

UIViewAutoResizingMasks bezeichnen wir als 'Federbeine' und 'Federn'. Bedenken Sie Folgendes: Sie haben ein großes Quadrat mit einem kleinen Quadrat im Inneren. Damit dieses Quadrat perfekt zentriert bleibt, müssen Sie von jeder Innenkante des großen Quadrats aus eine feste Breite festlegen, um es zu beschränken. Das sind Streben.

Federn arbeiten dagegen eher wie ein UIView während der Drehung. Angenommen, unsere Ansicht muss unten auf dem Bildschirm in der Mitte ausgerichtet bleiben (ähnlich wie bei UIToolbar). Wir möchten, dass die obere Feder flexibel bleibt, damit die Ansicht bei einer Drehung von 460 px auf 320 px dieselbe Position im Verhältnis zu den jetzt geänderten Abmessungen des Bildschirms beibehält. Das Hervorheben einer dieser Federn in IB entspricht dem Setzen des entsprechenden UIViewAutoResizingMask und das Hervorheben der oberen Feder entspricht dem Aufruf von myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin.

Werte können zusammen verwendet werden, indem sie in Klammern eingeschlossen werden und ein oder -Operator wie myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin) verwendet wird.

Die Masken melden Ihnen Zahlen, weil es sich um die Typdefinition eines NSUInteger handelt. Dies sind die Flags, die von Apple zugewiesen wurden. Befehlstaste + Klicken Sie auf eine, um die Methodendefinition anzuzeigen .

9
CodaFi