Autolayouting:约束相同的高度和宽度

时间:2014-08-21 20:25:24

标签: ios autolayout nslayoutconstraint

我遵循视觉格式约束

@"|-(0)-[[view0]-(5)-[view1(view0)]-(5)-[view2(view0)]-(5)-[view3(view0)]-(0)-|"

视图的数量很大,为简单起见,我们只考虑3个视图

使用上述约束我将视图设置为具有相同的宽度。 但也需要为视图设置具有相同的高度!

有没有办法在上面的约束中指定视图的宽度和高度是否相同?

我知道可以将视图的约束设置为具有相同的高度 @"V:[view1(view0)]@"V:[view2(view0)],但我想只有一个视觉约束字符串。

欢迎任何建议/参考!

1 个答案:

答案 0 :(得分:2)

不幸的是答案是 no ,你不能在同一个视觉布局字符串中混合高度和宽度。我将在下面解释原因。

首先,这是Auto Layout Visual Format Language的链接。这定义了-[NSLayoutConstraint constraintsWithVisualFormat:options:metrics:views:]的有效字符串。

从该参考页面,我们看到有效的可视格式字符串定义为:

(<orientation>:)?
(<superview><connection>)?
<view>(<connection><view>)*
(<connection><superview>)?

定位是我们感兴趣的。从上面的定义,我们可以在可视格式字符串的开头设置方向。还有其他地方我们可以设定方向吗?不会向下钻取其他符号(<superview><connection><view>),符号<orientation>不会再次出现。

现在让我们看看符号<orientation>。它被定义为:

H|V

表示您可以将<orientation>替换为H(水平)或V(垂直)。

这意味着

(<orientation>:)?

(H:)?(V:)?

?字符表示您可以包含括号中包含的0或1。这为(<orientation>:)?提供了三种可能性:H:V:或任何内容(相当于H:)。

如图所示,在可视格式字符串中只有一个地方可以设置方向,并且可以将其设置为水平垂直,而不是两者。这意味着您只能在一个可视格式字符串中设置高度宽度。