60

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

我已阅读 有关设置属性的UIView 文档。我正在寻找关于如何使用提供的各种掩码(例如,等)来翻译支柱弹簧view.autoresizingMask的合乎逻辑的解释。UIViewAutoresizingFlexibleLeftMargin

4

2 回答 2

132

为视图设置自动调整大小掩码时,使用按位包含 OR ( |) (Objective-C) 或数组 (Swift 2, 3, 4) 来指定springsstruts

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

    • 垂直弹簧: UIViewAutoresizingFlexibleHeight.flexibleHeight

    • 水平弹簧: UIViewAutoresizingFlexibleWidth.flexibleWidth

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

    • UIViewAutoresizingFlexibleLeftMargin或者.flexibleLeftMargin

    • UIViewAutoresizingFlexibleRightMargin或者.flexibleRightMargin

    • UIViewAutoresizingFlexibleTopMargin或者.flexibleTopMargin

    • UIViewAutoresizingFlexibleBottomMargin或者.flexibleBottomMargin

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

斯威夫特 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);

在此处输入图像描述

于 2012-05-06T12:26:47.930 回答
9

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

另一方面,弹簧的工作更像是UIView在旋转过程中。假设我们的视图必须保持在屏幕底部,居中对齐(很像 a UIToolbar)。我们想让它的顶部弹簧保持灵活,这样当视图从 460 像素旋转到 320 像素时,它相对于屏幕现在更改的尺寸保持相同的位置。在 IB 中突出显示其中一个弹簧等于设置适当UIViewAutoResizingMask的弹簧,特别突出顶部弹簧类似于调用myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin.

值可以串联使用,方法是将它们括在一对括号中并使用类似的或运算符myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)

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

于 2012-05-06T05:54:09.267 回答