使用自动布局时视图没有约束时会发生什么?

时间:2014-05-22 04:56:42

标签: ios xcode autolayout

在浏览Auto Layout的文档时,我想知道当视图没有约束时会发生什么。自动布局系统是否自动向视图添加约束,或者系统是否使用自动清除蒙版重新使用?

当视图没有任何约束时,Xcode会在大小检查器中告诉您,在构建时,会为视图生成显式左,上,宽度和高度约束。但是,当我在视图控制器的viewDidAppear:方法中记录视图的约束时,constraints数组为空。我在俯瞰什么?

3 个答案:

答案 0 :(得分:2)

你记录了什么,你在故事板上放了什么?如果我将标签拖到控制器中,然后在viewDidAppear中记录self.view.constraints,我就明白了,

2014-05-21 22:07:44.114 blah029347[3743:60b] (
    "<NSIBPrototypingLayoutConstraint:0x8d33f50 'IB auto generated at build time for view with fixed frame' H:|-(95)-[UILabel:0x8d32470](LTR)   (Names: '|':UIView:0x8d32290 )>",
    "<NSIBPrototypingLayoutConstraint:0x8d34230 'IB auto generated at build time for view with fixed frame' V:|-(177)-[UILabel:0x8d32470]   (Names: '|':UIView:0x8d32290 )>",
    "<NSIBPrototypingLayoutConstraint:0x8d342e0 'IB auto generated at build time for view with fixed frame' H:[UILabel:0x8d32470(42)]>",
    "<NSIBPrototypingLayoutConstraint:0x8d34310 'IB auto generated at build time for view with fixed frame' V:[UILabel:0x8d32470(21)]>",
    "<_UILayoutSupportConstraint:0x8d33cc0 V:[_UILayoutGuide:0x8d33460(0)]>",
    "<_UILayoutSupportConstraint:0x8d31690 V:|-(0)-[_UILayoutGuide:0x8d33460]   (Names: '|':UIView:0x8d32290 )>",
    "<_UILayoutSupportConstraint:0x8d31700 V:[_UILayoutGuide:0x8d338d0(0)]>",
    "<_UILayoutSupportConstraint:0x8d34340 _UILayoutGuide:0x8d338d0.bottom == UIView:0x8d32290.bottom>"
)

因此,正如您所看到的,系统确实添加了约束。

答案 1 :(得分:0)

如果视图没有任何约束,那么将根据自动调整遮罩为您生成它们。如果您添加视图并将其translatesAutoResizingMaskIntoContraints属性设置为NO,那么您将获得该视图的随机位置。没有任何约束可以满足,那么它的框架的任何值都可以工作。

答案 2 :(得分:0)

如果您根本不提供任何约束,Xcode会自动分配一组默认约束,称为自动约束。它是在构建应用程序的编译时执行此操作,而不是在设计时执行此操作。在设计用户界面时,Xcode 5中的自动布局很难避免。