2015-05-25 130 views
0

想象一下您并排放置三个按钮的情况。你需要三个按钮来填充可用的宽度,并且是最小尺寸的完美正方形,它们之间有一定的空间。要这样设置,你将有以下限制:限制空间时减少元素之间的空间量

答:
1:1的比例甲
通往上海华
宽度和高度> = 25

B:
相等的宽度和高度甲
导致:50

C:
相等的宽度和高度,以甲
主导到B:50
尾随至上海华

现在想象的可用宽度足够小,使得没有在为了保证按钮与它们中的每50之间完美的正方形足够的水平空间。而不是打破纵横比和宽度约束,而是希望减少按钮之间的空间量。我的问题是,你怎么做?

我想我只是改变的领先制约的关系,小于或等于,但这会导致不等式约束歧义与这两个约束条件。我想或许我需要为领导指定一个最小值,所以我添加了两个更大的领先约束,设置为大于或等于10.这不能解决歧义问题。然后我又添加了一组领先约束,这次等于两个值之间的一个设定值,然后我减少了这些约束的优先级。这解决了歧义,但按钮之间的空间永远不会减少 - 尽管其优先级降低,但它总是为约束设置的值与等于约束。

需要设置哪些约束条件才能获得?

  • 三个按钮以相同的水平空间并排显示
  • 所有这三个按钮是完美的正方形
  • 的最小尺寸为按钮(25×25)
  • 一组量的它们之间的空间 - 50
  • 当水平空间太小而不能确保所有约束都能满足时,它应该减少按钮之间的空间量。

回答

1

你会想要一个间隔约束在所需的优先级,表示最小允许的间距。例如,> = 10 @ 1000。

然后,你想在表达期望的间距与平等,比如== 50 @ 200低优先级的间隔限制。

但是,您有两个按钮间隔。不明确之处是因为自动布局不知道在没有足够的可用空间来制作所需的距离时要减少哪一个。

您可以设置不同的优先事项来解决歧义,但随后而另一个保持在50,直到它达到最小值,此时对方会减少一个间距就会崩溃了。

我怀疑你希望两个空格始终相等。没有直接的方法来做到这一点,只是有限制。相反,您需要使用隐藏的间隔视图。所以,你会这样做:

|-[buttonA][spacer1(>=10,[email protected])][buttonB(==buttonA)][spacer2(==spacer1)][buttonC(==buttonA)]-| 
0

尝试制作每个按钮UIViewContentModeScaleAspectFit或任何IB称之为的内容模式。然后控制使用宽度而不是leading之间的空间。我猜测,敲击之间的空间会调用按钮的目标,所以在这种情况下使用三个常规的UIViews这种方式,然后添加按钮作为他们的子视图。

0

我最终决定避免间隔视图,并制定出解决方案来实现最终结果。我不是设置它,所以自动布局会计算出计算结果并自动减少按钮之间的空间,所以我决定根据视图的宽度以编程方式设置这些约束的constant。因此,确保按钮之间的空间对于大宽度是大的,对于小宽度是小的。

为了实现这一点,我简单地设置了水平约束的出口集合,然后在updateViewConstraints中环绕约束并将constant设置为等于self.view.frame.size.width/12