当视图之一隐藏时,如何自动调整 Vertical UIStackView 的宽度?

Ank*_*ash 0 ios autolayout uistackview

我有一个带有 UIView (V1) 和 UILabel(L1) 的垂直 UIStackView(S1)。UIView 包含水平 StackView(S2) 和 ImageView 以及垂直 StackView(S3),以将标签显示在另一个标签下方。

现在,当我隐藏顶视图(即 V1)时,我的标签占据了预期的完整高度。但我希望堆栈视图压缩以仅显示标签(L1)内容。但就我而言,它并没有减少宽度。

这是我启动和隐藏 V1 时的 ViewTree 和快照。

视图树/视图布局

Don*_*Mag 5

当您设置.isHidden = true堆栈视图的排列子视图时,堆栈视图将删除它所占用的空间......但仅限于方向.axis

所以你的 Stack View 仍然分配 的宽度Top PINK View

要删除 的高度宽度Top PINK View,您需要将其从堆栈视图中删除......而不仅仅是隐藏它。

尝试这样 - 点击按钮将在隐藏和显示之间切换:

@IBOutlet var mainStackView: UIStackView!

@IBAction func showHide(_ sender: Any) {
    if !topPINKView.isHidden {
        topPINKView.isHidden = true
        topPINKView.removeFromSuperview()
    } else {
        mainStackView.insertArrangedSubview(topPINKView, at: 0)
        topPINKView.isHidden = false
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:请务必将堆栈视图连接到@IBOutlet var mainStackView: UIStackView!


编辑

您甚至可以将其减少为:

@IBAction func showHide(_ sender: Any) {
    if topPINKView.superview != nil {
        topPINKView.removeFromSuperview()
    } else {
        mainStackView.insertArrangedSubview(topPINKView, at: 0)
    }
}
Run Code Online (Sandbox Code Playgroud)