如何在 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
是默认值。 Alignment
是arrangedViews
在垂直轴上占据的面积(在horizontal
的情况下,fill
将占据整个高度)。
要让它以垂直轴为中心,请使用:
stackView.alignment = center
【讨论】:
以上是关于如何在 UIStackView 内排列的子视图上设置自定义高度?的主要内容,如果未能解决你的问题,请参考以下文章
当 UIStackView 更改其排列的子视图时,UITableViewCell 不会调整大小
即使隐藏了排列的子视图,UIStackView 似乎也会堆叠间距