swift - 垂直居中多个视图,没有虚拟间隔视图

时间:2016-05-07 01:12:39

标签: ios swift autolayout

假设我有2个视图(标签或文本字段),其高度位于彼此之上(不在顶部)。我希望这个小组在超级视图中垂直居中。

我知道我可以使用上方和下方的虚拟间隔视图,并在故事板中设置相同的高度。我不是专家,但这对我来说似乎不对。

可以通过将顶视图的顶部约束设置为等于底部视图的底部约束来在故事板中完成吗?

2 个答案:

答案 0 :(得分:4)

如果你的子视图'高度将在运行时更改(或者因为您更改其中的文本行数,或者因为您支持Dynamic Type就像一个好的iOS应用程序应该),然后,您不能这样做只有约束。您需要额外的视图,或者需要从代码更改约束常量。如果您使用额外的视图(我推荐),您可以使用一个额外的视图。

如果您的部署目标是iOS 9或更高版本,最简单的解决方案是将您的子视图放在垂直UIStackView中,并将UIStackView置于超级视图的中心。根据您想要的布局,您可能不需要直接在子视图上使用任何约束。

如果您不能使用堆栈视图,则可以使用间隔视图。首先,在子视图之间设置垂直间距约束,以便将它们与您想要的任何填充粘合在一起。然后在子视图旁边添加一个间隔视图。将间隔视图设置为隐藏。 (隐藏视图仍然参与布局。)将垫片的顶部边缘限制在顶部子视图的顶部边缘,并将垫片的底部边缘约束到底部子视图的底部边缘。然后将间隔物约束在其容器中垂直居中(应该是超视图)。

你还需要在间隔器上添加水平约束以防止Xcode抱怨,但是由于间隔器被隐藏,因此水平尺寸和位置并不重要。所以只需把它放在方便的地方。

这是最后一组约束和布局:

constraints and layout

间隔是粉红色的瘦身。

答案 1 :(得分:0)

您可以通过$XML = simplexml_load_file('po.xml'); 轻松实现,控制并拖动您想要在故事板中居中的对象,选择center vertically。这样,您可以单独在superView中居中这些子视图。如果要将这些子视图集中在一起,可以创建另一个center vertically in container以包含这些视图(标签,textFields),然后将containerView置于superView中。

希望这个帮助: - )

在故事板中控制和拖动

enter image description here

单独设置三个子视图。

enter image description here

将它们与容器视图一起居中

enter image description here