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

问题描述 投票:0回答:1

我有一个带有UIView(V1)和UILabel(L1)的Vertical UIStackView(S1)。 UIView包含带有ImageView的Horizo​​ntal StackView(S2)和Vertical StackViews(S3),以在一个标签下面显示一个标签。

现在,当我隐藏俯视图即V1时,我的Label占据了预期的全高。但是我想压缩堆栈视图以仅显示Label(L1)内容。但就我而言,这并不是减小宽度。

这里是我的ViewTree和快照,它们在启动时和V1隐藏时。

ViewTree/ViewLayout

ios autolayout uistackview
1个回答
1
投票

[当在堆栈视图的排列的子视图上设置.isHidden = true时,堆栈视图将删除它占用的空间...,但仅沿.axis方向。

因此您的堆栈视图仍然分配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)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.