如何以编程方式使用 UIView autoresizingMask 属性?

How to use UIView autoresizingMask property programmatically?

提问人:MattyG 提问时间:5/6/2012 最后编辑:Paulo MattosMattyG 更新时间:7/28/2021 访问量:53638

问:

我已经用Interface Builder布置了一些子视图,但我想用代码来做。

我已经阅读了有关设置属性的 UIView 文档。我正在寻找一个合乎逻辑的解释,说明如何使用提供的各种掩码(例如,等)来平移支柱弹簧view.autoresizingMaskUIViewAutoresizingFlexibleLeftMargin

iOS Objective-C Swift UIVieview 自动调整大小掩码

评论


答:

10赞 CodaFi 5/6/2012 #1

UIViewAutoResizingMask就是我们所说的“支柱”和“弹簧”。考虑一下:你有一个大正方形,里面有一个小正方形。为了使该正方形保持完美居中,您必须从大正方形的每个内边缘设置一个固定的宽度,以约束它。这些是支柱。

另一方面,弹簧的工作方式更像是旋转过程中的工作方式。假设我们的视图必须保持在屏幕底部,在中间对齐(很像 )。我们希望保持它的顶部弹簧的灵活性,以便当视图从 460 像素旋转到 320 像素时,它相对于屏幕现在更改的尺寸保持相同的位置。在 IB 中突出显示其中一个弹簧等于设置适当的弹簧,而专门突出显示顶部弹簧类似于调用 .UIViewUIToolbarUIViewAutoResizingMaskmyView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin

可以通过将值括在一对括号中并使用 or 运算符(如myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)

这些掩码会向您报告数字,因为它们是 的 typdef,而这些是 Apple 分配给它们的标志。Cmd+单击一个以查看其方法定义。NSUInteger

143赞 MattyG 5/6/2012 #2

为视图设置自动调整大小掩码时,请使用按位非独占 OR () (Objective-C) 或数组 (Swift 2, 3, 4) 来指定弹簧支柱|

  • 弹簧通过指定掩码(分别为 Objective-C 或 Swift)来表示:

    • 立式弹簧:或UIViewAutoresizingFlexibleHeight.flexibleHeight

    • 水平弹簧:或UIViewAutoresizingFlexibleWidth.flexibleWidth

  • 支柱由缺少四个“柔性边距”掩码之一表示(即,如果支柱不存在,则指定该边距的掩码):

    • UIViewAutoresizingFlexibleLeftMargin.flexibleLeftMargin

    • UIViewAutoresizingFlexibleRightMargin.flexibleRightMargin

    • UIViewAutoresizingFlexibleTopMargin.flexibleTopMargin

    • UIViewAutoresizingFlexibleBottomMargin.flexibleBottomMargin

例如,具有水平弹簧顶部和底部支柱的视图将具有指定为灵活的宽度以及左右边距:

Swift 3 和 4

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

斯威夫特 2

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

斯威夫特 1.2

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

Objective-C语言

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

enter image description here

评论

4赞 MattyG 12/4/2012
@Flink - 您的编辑是错误的。我已将我的答案恢复到原始状态。请仔细阅读,尤其是:“支柱由缺少四个'柔性边距'掩码之一表示(即,如果支柱不存在,则指定该边距的掩码):”