How to use UIView autoresizingMask property programmatically?

IosObjective CSwiftUiviewAutoresizingmask

Ios Problem Overview


I've laid out some subviews with Interface Builder, but I'd like to do it in code instead.

I've read the UIView docs about setting the view.autoresizingMask property. I'm looking for a logical explanation of how to translate the struts and springs by using the various masks offered (e.g., UIViewAutoresizingFlexibleLeftMargin, etc).

Ios Solutions


Solution 1 - Ios

When setting the autoresizing mask for a view, use a bitwise inclusive OR (|) (Objective-C), or an array (Swift 2, 3, 4) to specify springs and struts.

  • Springs are represented by specifying a mask (Objective-C or Swift, respectively):

  • vertical spring: UIViewAutoresizingFlexibleHeight or .flexibleHeight

  • horizontal spring: UIViewAutoresizingFlexibleWidth or .flexibleWidth

  • Struts are represented by the lack of one of the four 'flexible margin' masks (i.e. if a strut does not exist, the mask for that margin is specified):

  • UIViewAutoresizingFlexibleLeftMargin or .flexibleLeftMargin

  • UIViewAutoresizingFlexibleRightMargin or .flexibleRightMargin

  • UIViewAutoresizingFlexibleTopMargin or .flexibleTopMargin

  • UIViewAutoresizingFlexibleBottomMargin or .flexibleBottomMargin

For example, a view with a horizontal spring and top and bottom struts would have the width, and left and right margins specified as flexible:

Swift 3 and 4

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

Solution 2 - Ios

UIViewAutoResizingMasks are what we refer to as 'struts' and 'springs'. Consider this: you have a large square with a small square inside. In order for that square to stay perfectly centered, you must set a fixed width from each inside edge of the large square, so as to constrain it. These are struts.

Springs, on the other hand, work more like a UIView does during rotation. Let's say our view must stay on the bottom of the screen, aligned in the center (Much like a UIToolbar). We want to keep it's Top spring flexible so that when the view rotates from 460 px to 320 px, it keeps it's same position relative to the screen's now changed dimensions. Highlighting one of those springs in IB is equal to setting the appropriate UIViewAutoResizingMask and highlighting the top spring specifically is akin to calling myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin.

Values may be used in tandem by enclosing them in a pair of parenthesis and using an or operator like myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)

The masks are reporting numbers to you because they are a typdef of an NSUInteger and those are the flags that apple has assigned them. Cmd+click on one to see its method definition.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMattyGView Question on Stackoverflow
Solution 1 - IosMattyGView Answer on Stackoverflow
Solution 2 - IosCodaFiView Answer on Stackoverflow