繁体   English   中英

AutoLayout:在可以调整大小的超级视图中垂直居中两个UIView

[英]AutoLayout: Vertically centering two UIViews in a superview that can resize

我有一个UIButtons,一个在另一个的顶部,在superview中,其高度可以调整大小。 两个按钮之间应有一个恒定的垂直间距,但顶部和底部间距应调整大小,以便在调整大小时两个按钮在superview中保持居中。

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

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

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

这在IB中是如此微不足道。

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

2)^从button1拖到左边。 选择“在容器中垂直居中”。

3)用button2做同样的事情。

4)现在唯一要做的就是调整按钮的大小,因为这就是它的样子。

在此输入图像描述

这也是非常微不足道的。

5)^从button1向左拖动。 选择“领先空间到容器边际”。

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

7)用button2做同样的事情。

成品,看起来像这样(NB我没有完全居中,但我可以很容易):

在此输入图像描述

在此输入图像描述

垂直居中的最简单方法是添加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

同意rdelmar。 如果要保留视图层次结构,这是另一个选项。

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

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

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

实现此目的的一种方法是将两个按钮括在另一个UIView中,并将该视图置于控制器视图的中心。 使按钮与此视图的顶部和底部保持固定距离,并在它们之间保持固定距离,或者为视图固定高度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM