iOS自动布局可将我的视图居中于两个视图之间


77

如何在Interface Builder中设置自动布局,以垂直排列视图,如图所示:

方案

Top view固定在屏幕的顶部边缘,Bottom view固定在屏幕的底部边缘。My view应该在顶视图和底视图之间居中(因此,距离Top view等于到的距离Bottom view

Answers:


111

这样做的方法是在可见视图之间有2个不可见的“间隔”视图。

您不能使空格的高度相等。但是,您可以使用“间隔”视图,并将它们放置在视图之间(与周围视图的间隙为0)。

然后,您赋予这些视图相等的高度,它们将推动您的视图居中,My View并与Bottom View和居中Top View

即像这样...

V:|[Top View][spacer1][My View][spacer2(==spacer1)][Bottom View]|

编辑-另一种方式

我只是想到了另一种方法。你可以有一个无形的容器UIView是之间Top ViewBottom View没有差距。

然后,将其放置My View在此不可见视图中,并将其垂直居中。


1
为什么不只保持顶视图和底视图的高度相等,而使中间视图在父视图中居中呢?
Antonio E.

5
好吧,那行得通。除非那不是问题。问题中的图像清楚地显示了不同高度的顶视图和底视图。此外,它要求将一个视图准确地居中于两个视图之间。它不需要询问将视图置于其超级视图的中心。
Fogmeister 2014年

1
@brigadir是的,在Interface Builder右下角的按钮之一中,它具有“更新框架以匹配约束”以及“将约束更新为框架”的选项。您需要第二个。
Fogmeister 2014年

1
我认为他是说“另一种方式”比原始答案更好,而不是说有第三种方式更好。:)
詹姆斯·理查德

2
我只是使用了您的“另一种方式”,设置起来非常简单,谢谢!
user3344977 '02

46

另一种解决方案是在顶视图底视图之间添加不可见视图,并将我的视图置于该视图的中心:

居中的UIView


1
如此天才的骇客!非常感谢
Maximelc

15

(5年后),我找到了最经典的解决方案:

UILayoutGuide 是专门为解决此类任务而引入的(自iOS 9起)。

使用布局指南替换您可能创建的虚拟视图,以表示视图间空间或用户界面中的封装-参考文档

它在代码中可以正常工作,但是不幸的是,Interface Builder不支持自定义布局指南。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.