在debuggingautolayout时,autoresizing掩码string的含义是什么,例如h = – &v = – & – ?
我想他们必须参考struts和spring模型,但我找不到任何提及它们。 当你NSLog
约束时,它们有时会出现在未logging类NSAutoresizingMaskLayoutConstraint
的描述string中。 我注意到至less有三种不同的types: h=---
, h=--&
, h=-&-
带有水平和垂直版本。
debugging约束布局时,它们变得很多。
如果您指定自动调整屏蔽而不是约束,或者根本不指定任何约束,那么视图将具有与NSLayoutConstraints相对的NSAutoResizingMaskLayoutConstraint约束。 如果将translatesAutoresizingMaskIntoConstraints
设置为NO
,则不会显示这些约束。 您无法在单个视图中进行混搭,或者获得不可满足的约束错误。
我设置了一个快速testing项目,其中包含各种自动调整掩码的组合,logging格式非常简单。
-
h=
或v=
表示我们在水平或垂直方向上讨论约束。 -
-
表示固定大小 -
&
表示灵活的大小 - 符号顺序表示边距,尺寸,边距
因此, h=&-&
意味着您有灵活的左右边距和固定的宽度, v=-&-
表示固定的顶部和底部边距以及灵活的高度等等。
如果您在“掌握自动布局的最佳实践”中观看WWDC 2012video,则会有一个部分,演示者提到这是使用Autoresizing Masks和NOT约束的视图的语法。 没有可视化的格式与NSLayoutConstraint相似。
添加到jrturton的答案,我发现了解约束描述的最佳信息是您需要在代码中创build约束的Visual Format Language文档。 这种语言被形容为一个正式的语法,因此可能需要一分钟才能吸收。
举个例子:
<NSLayoutConstraint:0x10ada8a70 H:|-(44)-[UIButton:0x10ac5dc30] (Names: '|':UIView:0x10ac60470)>
这是一个水平方向约束( H :)从超级视图( | )到UIButton的链接是44个像素命名的超级视图是UIView( 名称:'|':UIView:) – 重要的是要知道,因为你不需要受到直接的超级观点的制约
hex值是您的UI元素的所有有效地址。 当你在所有exception上断点并且在约束冲突上暂停时,你可以使用po地址来查看约束的对象。 在我的情况下:
(lldb) po 0x10ac5dc30 <UIButton: 0x10ac5dc30; frame = (44 199; 30 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x10ac5ddf0>> (lldb) po 0x10ac60470 <UIView: 0x10ac60470; frame = (0 64; 320 504); autoresize = RM+BM; animations = { position=<CABasicAnimation: 0x10ac5ec70>; bounds=<CABasicAnimation: 0x10ac62250>; }; layer = <CALayer: 0x10ac60530>>