隐藏其中一个视图时如何自动调整 Vertical UIStackView 的宽度?

How to auto resize width of Vertical UIStackView when one of the view is hidden?

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

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

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

当您在堆栈视图的排列子视图上设置 .isHidden = true 时,堆栈视图将删除它正在占用的 space...但仅在 .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
    }
}

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


编辑

您甚至可以将其减少到:

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