18

我有两个 UIButton,一个在另一个之上,在一个可以调整高度的超级视图中。两个按钮之间应该有一个恒定的垂直间距,但是顶部和底部的间距应该调整大小,以便两个按钮在调整大小时保持在超级视图的中心。

我尝试在每个按钮到超级视图的间距以及按钮之间的恒定垂直间距上创建两个小于或等于约束(具有相同优先级),如下所示: 在此处输入图像描述

(这里它小于或等于的原因是因为这个视图是在 IB 中为 4 英寸屏幕的给定高度定义的,但对于 3.5 英寸屏幕可以缩小。)但是,这并不能解决问题,正如您在应用程序运行时从屏幕截图中看到的那样: 在此处输入图像描述

几乎就好像您希望能够告诉 AutoLayout 这两个约束本身应该具有相等的值,即使它们都设置为“小于或等于”。有什么办法可以做我想做的事情,或者更好的方法吗?

4

4 回答 4

13

这在 IB 中是微不足道的。

1) ⌃ 从 button1 拖到顶部。选择“在容器中水平居中”。

2) ⌃ 从 button1 向左拖动。选择“在容器中垂直居中”。

3)对button2做同样的事情。

4)现在剩下要做的就是调整按钮的大小,因为它看起来就是这样。

在此处输入图像描述

这也是非常微不足道的。

5) ⌃ 从 button1 向左拖动。选择“引导空间到容器边距”。

6) ⌃ 从 button1 拖动到右侧。选择“容器边距的尾随空间”。

7)用button2做同样的事情。

成品,看起来像这样(注意我没有把它们放在中心,但我可以很容易地做到):

在此处输入图像描述

在此处输入图像描述

于 2014-09-25T18:20:20.323 回答
7

垂直居中的最简单方法是添加NSLayoutAttributeCenterY约束 - 最好是添加到靠近视图中心的元素。如果所有视图都有垂直间距约束,那么它们都将居中。无需破坏视图层次结构或添加间隔视图。

[self.view addConstraint:
    [NSLayoutConstraint constraintWithItem:button2 
                                 attribute:NSLayoutAttributeCenterY
                                 relatedBy:NSLayoutRelationEqual 
                                    toItem:self.view 
                                 attribute:NSLayoutAttributeCenterY 
                                multiplier:1.0 
                                  constant:0]];

如果需要调整定位,请设置常数。例如:constant:-30将其向上移动 30 点。

您还可以根据视图的不同逻辑区域锚定元素。例如,如果您想将第一个按钮锚定在视图高度的 25%,您可以将乘数设置为0.5.

于 2013-12-02T15:57:19.270 回答
4

同意 rdelmar。如果您想保留视图层次结构,这是另一种选择。

您当前正在使用约束来分隔顶部和底部的按钮。相反,创建两个空UIViews,它们将用作分隔符。它们应该一个位于按钮的顶部,一个位于按钮的底部。使用自动布局约束,确保这两个间隔视图的高度始终相等。确保它们分别固定在按钮的顶部和底部以及超级视图的顶部和底部。

在 VFL 中:V:|-[spacer1(==spacer2)]-[button1]-(20)-[button2]-[spacer2(==spacer1)]-|.

您可能必须在代码中执行此操作,我不确定 IB 是否可以执行此操作。

于 2013-07-11T16:25:40.313 回答
2

实现此目的的一种方法是将两个按钮包含在另一个 UIView 中,并将该视图置于控制器视图的中心。给按钮到该视图的顶部和底部的固定距离,以及它们之间的固定距离,或者视图的固定高度。

于 2013-07-11T16:16:58.197 回答