在浏览Auto Layout的文档时,我想知道当视图没有约束时会发生什么。自动布局系统是否自动向视图添加约束,或者系统是否使用自动清除蒙版重新使用?
当视图没有任何约束时,Xcode会在大小检查器中告诉您,在构建时,会为视图生成显式左,上,宽度和高度约束。但是,当我在视图控制器的viewDidAppear:
方法中记录视图的约束时,constraints
数组为空。我在俯瞰什么?
答案 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中的自动布局很难避免。