iOS自动布局:如何使视图在两个视图之间居中

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

scheme

将“顶部视图”固定在屏幕顶部边缘,“底部视图”固定在屏幕底部边缘。 “我的视图”应该在顶部和底部视图之间居中(因此到“顶部视图”的距离等于到“底部视图”的距离)。
3个回答

114
这样做的方法是在你可见视图之间放置2个不可见的“spacer”视图。
你无法使空格具有相等的高度。但是,您可以使用“spacer”视图并将它们放置在您的视图之间(与周围视图的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.
6
好的,我会尽力进行翻译。请确认以下翻译是否符合您的要求:那个方法可行。但这不是问题所在。问题中的图片清楚地展示了上下两个视图高度不同。而且问题是关于如何将一个视图恰好居中在两个视图之间,而不是在其父视图中心对齐。 - Fogmeister
1
@brigadir 是的,在Interface Builder右下角的一个按钮中,有“更新框架以匹配约束条件”和“更新约束条件以匹配框架”的选项。你需要选择第二个选项。 - Fogmeister
1
我认为他的意思是,“另一种方式”比原来的答案更好,而不是有第三种更好的方式。 :) - James Richard
2
我刚刚使用了你的另一种方法,设置非常容易,谢谢! - user3344977
显示剩余4条评论

55

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

居中的UIView


1
这个天才的黑科技!非常感谢。 - Maximelc

23

五年后,我找到了最合适的解决方案:

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

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

代码中它表现得很好,但遗憾的是 Interface Builder 不支持自定义布局指南。


我简直不敢相信我直到现在才发现这个(:facepalm:)。非常感谢你! - josher932
一些示例代码会很棒。 - clearlight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接