如何在 UIStackView 内排列的子视图上设置自定义高度?

Posted

技术标签:

【中文标题】如何在 UIStackView 内排列的子视图上设置自定义高度?【英文标题】:How to set custom heights on arranged subviews within a UIStackView? 【发布时间】:2019-06-13 20:31:23 【问题描述】:

我有一个水平的UIStackView 有一些排列的子视图,其高度应小于 StackView 的高度,但沿 StackView 的 y 轴居中。但是,即使对子视图设置了约束,它们的高度也不会改变,并且与 StackView 的高度相同。

除了设置约束来定义子视图的高度并将它们的 y 轴设置为 UIStackView 的高度之外,我已将 StackView 的对齐设置为居中,并将其分布设置为“按比例填充”——这些都已在答案中被推荐类似的问题,但没有一个会改变子视图的高度。

我还尝试设置 StackView 的 directionalLayoutMargins,其顶部和底部边距都设置为(StackView 的高度 - 排列的子视图的高度)/2,所有这些都是将子视图移到远低于StackView 的中心 y 轴,如果我将底部边距设置为 0,则挤压子视图。

这是我的限制:

button.widthAnchor.constraint(equalToConstant: width),
button.heightAnchor.constraint(equalToConstant: 32),
button.centerYAnchor.constraint(equalTo: contentView.stackView.centerYAnchor)

【问题讨论】:

【参考方案1】:

一些事情:

首先,确保您设置:

button.translatesAutoresizingMaskIntoConstraints = false

此外,请确保您的约束处于活动状态,就像这样(可能已经是这种情况,但只是确定):

button.widthAnchor.constraint(equalToConstant: width).isActive = true
button.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
button.centerYAnchor.constraint(equalTo: contentView.stackView.centerYAnchor).isActive = true

最后,最重要的一点:stackView.alignment = fill 是默认值。 AlignmentarrangedViews 在垂直轴上占据的面积(在horizontal 的情况下,fill 将占据整个高度)。

要让它以垂直轴为中心,请使用:

stackView.alignment = center

【讨论】:

以上是关于如何在 UIStackView 内排列的子视图上设置自定义高度?的主要内容,如果未能解决你的问题,请参考以下文章

当 UIStackView 更改其排列的子视图时,UITableViewCell 不会调整大小

UIStackView 图层属性

UIStackView 隐藏/取消隐藏排列的子视图问题

即使隐藏了排列的子视图,UIStackView 似乎也会堆叠间距

当排列视图的大小发生变化时,如何确保 UIStackView 通知它的所有后代?

为啥 UIStackView 不堆叠 UILabel 安排的子视图?