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

时间:2019-06-13 20:31:23

标签: ios swift uikit nslayoutconstraint uistackview

我有一个水平的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 个答案:

答案 0 :(得分:0)

几件事:

首先,请确保您设置:

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在垂直轴上占据的面积(对于horizontalfill将占据整个高度)。

要使其居中于垂直轴上,请使用:

stackView.alignment = center