2012-05-06 5 views
46

Ich habe einige Subviews mit Interface Builder angelegt, aber ich würde es stattdessen in Code tun.UIView autoresizingMask - Interface Builder zu Code - Erstellen Sie programmatisch Streben und Federn - Swift oder Objective-C

Ich habe die UIView docs zum Festlegen der View.autoresizingMask Eigenschaft gelesen. Ich suche nach einer logischen Erklärung, wie die Streben und Federn zu übersetzen sind, unter Verwendung der verschiedenen angebotenen Masken (z. B. UIViewAutoresizingFlexibleLeftMargin usw.).

Antwort

115

Bei der automatischen Größenmaske für eine Ansicht einstellen, verwenden eine bitweise ODER inclusive (|) (Objective-C) oder ein Array (Swift 2, 3)Federn und Streben zu spezifizieren.

  • Federn werden durch die Angabe einer Maske (Objective-C oder Swift 3 bezeichnet) dargestellt:

    • vertikale Feder: UIViewAutoresizingFlexibleHeight oder .flexibleHeight

    • horizontale Feder: UIViewAutoresizingFlexibleWidth oder .flexibleWidth

  • Struts werden durch das Fehlen einer der vier "flexiblen Rand" -Masken (d. H.wenn eine Strebe nicht vorhanden ist, die Maske für die Marge angegeben):

    • UIViewAutoresizingFlexibleLeftMargin oder .flexibleLeftMargin

    • UIViewAutoresizingFlexibleRightMargin oder .flexibleRightMargin

    • UIViewAutoresizingFlexibleTopMargin oder .flexibleTopMargin

    • UIViewAutoresizingFlexibleBottomMargin oder .flexibleBottomMargin

beispielsweise eine Ansicht mit einer horizontalen Feder und oberen und unteren Streben würde die Breite haben, und linken und rechten Rand angegeben als flexible:

Swift 3

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

Swift 2

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

Swift 1,2

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

Objective-C

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

enter image description here

+3

@Flink - Ihre Bearbeitung ist falsch. Ich habe meine Antwort wieder auf den ursprünglichen Zustand zurückgesetzt. Bitte lesen Sie es sorgfältig, vor allem: "Struts werden durch das Fehlen einer der vier 'flexiblen Rand' Masken dargestellt (dh wenn eine Strebe nicht existiert, wird die Maske für diesen Rand angegeben):" – MattyG

+0

Sorry, mein Fehler. .. – Shmidt

+0

sehr hilfreich, danke – kukudas

8

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

Federn arbeiten dagegen eher wie eine UIView während der Rotation. Nehmen wir an, unsere Ansicht muss unten auf dem Bildschirm bleiben und in der Mitte ausgerichtet sein (ähnlich wie eine UIToolbar). Wir möchten, dass die Top-Feder flexibel bleibt, damit sich die Ansicht von 460 px auf 320 px dreht und die Position relativ zu den jetzt geänderten Dimensionen beibehalten wird. Die Hervorhebung einer dieser Federn in IB entspricht der Einstellung der entsprechenden UIViewAutoResizingMask, und die Hervorhebung der oberen Feder ist dem Aufruf von myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin ähnlich.

Werte im Tandem kann sie durch Einschließen in einem Paar von Klammern und mit wie myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)

Die Masken berichten Zahlen Sie ein oder Operator verwendet werden, da sie eine typdef eines NSUInteger sind und das sind die Fahnen, die Apple hat sie zugewiesen. Cmd + Klicken Sie auf einen, um seine Methodendefinition zu sehen.