我有一个水平UIStackView
,其中包含一些排列的子视图,其高度应小于StackView的高度,但沿StackView的y轴居中。但是,即使在子视图上设置约束后,它们的高度也不会改变,并且与 StackView 的高度相同。
除了设置定义子视图高度的约束并将其 y 轴设置为 UIStackView 的 y 轴之外,我还将 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)
几件事:
首先,请确保设置:
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