我已经使用Interface Builder布局了一些子视图,但我想在代码中进行。
我已阅读有关设置view.autoresizingMask属性的UIView docs。我正在寻找一个合理的解释,说明如何使用提供的各种掩码(例如UIViewAutoresizingFlexibleLeftMargin
等)来翻译struts和spring。
答案 0 :(得分:125)
为视图设置自动调整遮罩时,使用按位包含OR(|
)(Objective-C)或数组(Swift 2,3)指定弹簧和的支柱强>
弹簧通过指定遮罩(分别为Objective-C或Swift 3)来表示:
垂直弹簧:UIViewAutoresizingFlexibleHeight
或.flexibleHeight
横向弹簧:UIViewAutoresizingFlexibleWidth
或.flexibleWidth
Struts 表示缺少四个“灵活边距”掩码中的一个(即如果不存在支柱,则指定该边距的掩码):
UIViewAutoresizingFlexibleLeftMargin
或.flexibleLeftMargin
UIViewAutoresizingFlexibleRightMargin
或.flexibleRightMargin
UIViewAutoresizingFlexibleTopMargin
或.flexibleTopMargin
UIViewAutoresizingFlexibleBottomMargin
或.flexibleBottomMargin
例如,带有水平弹簧和顶部和底部支柱的视图将具有宽度,左右边距指定为灵活:
Swift 3
mySubview.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin]
Swift 2
mySubview.autoresizingMask = [.FlexibleWidth, .FlexibleLeftMargin, .FlexibleRightMargin]
Swift 1.2
mySubview.autoresizingMask = .FlexibleWidth | .FlexibleLeftMargin | .FlexibleRightMargin
<强>目标C 强>
mySubview.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin);
答案 1 :(得分:9)
UIViewAutoResizingMask
是我们所说的'struts'和'spring'。考虑一下:你有一个大方形,里面有一个小方块。为了使该正方形保持完美居中,您必须从大正方形的每个内边缘设置固定宽度,以便约束它。这些是支柱。
弹簧在旋转过程中更像UIView
。假设我们的视图必须保持在屏幕的底部,在中心对齐(很像UIToolbar
)。我们希望保持它的顶部弹簧灵活,以便当视图从460像素旋转到320像素时,它保持相对于屏幕现在改变的尺寸的相同位置。在IB中突出显示其中一个弹簧等于设置适当的UIViewAutoResizingMask
并突出显示顶部弹簧特别类似于调用myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin
。
值可以通过将它们括在一对括号中并使用或myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)
面具会向您报告数字,因为它们是NSUInteger
的范围,而这些是苹果分配给它们的标志。 Cmd +单击一个以查看其方法定义。