在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文档。 这种语言被形容为一个正式的语法,因此可能需要一分钟才能吸收。

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html#//apple_ref/doc/uid/TP40010853-CH3-SW1

举个例子:

 <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>>