ios - swift - 在没有虚拟间隔 View 的情况下垂直居中多个 View

标签 ios swift autolayout

假设我有 2 个 View (标签或文本字段),它们的高度在彼此之上(不是在顶部)。我希望该组在 super View 中垂直居中。

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

是否可以通过将顶 View 的顶部约束设置为等于底 View 的底部约束来在 Storyboard中完成?

最佳答案

如果您的 subview 的高度会在运行时发生变化(要么是因为您更改了其中的文本行数,要么是因为您支持 Dynamic Type,就像一个好的 iOS 应用程序应该做的那样),那么 ,你不能只用约束来做到这一点。您要么需要额外的 View ,要么需要从代码中更改约束常量。如果您使用额外的 View (我推荐),您可以使用一个额外的 View 。

如果您的部署目标是 iOS 9 或更高版本,最简单的解决方案是将您的 subview 放入垂直 UIStackView 并将 UIStackView 置于父 View 的中心。根据您想要的布局,您可能不需要直接对 subview 进行任何约束。

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

您还需要在间隔符上添加水平约束以防止 Xcode 报错,但水平大小和位置并不重要,因为间隔符是隐藏的。所以把它放在方便的地方。

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

constraints and layout

垫片是瘦粉色 View 。

关于ios - swift - 在没有虚拟间隔 View 的情况下垂直居中多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37083454/

相关文章:

ios - Swift - 表达式列表中的预期表达式

swift - 如何在swift中加载popover

ios - 我可以在 IOS 中获取下载的 M4A、MP3 文件吗?

ios - 枚举错误 'member"不是 "Enum"的类型

ios - 具有不同数量项目的 CollectionView,项目应填充 Collection View

ios - 如何正确设置水平 ImageView 的自动布局约束?

ios - TableView/Screen 的 AutoLayout UITableViewCell 高度倍数

ios - 以编程方式创建具有多个标签的 UIView

ios - Swift:为用户搜索 Firebase 数据库

ios - ionic / Cordova : I need a new app ID