我有一个带有UIView(V1)和UILabel(L1)的Vertical UIStackView(S1)。 UIView包含带有ImageView的Horizontal StackView(S2)和Vertical StackViews(S3),以在一个标签下面显示一个标签。
现在,当我隐藏俯视图即V1时,我的Label占据了预期的全高。但是我想压缩堆栈视图以仅显示Label(L1)内容。但就我而言,这并不是减小宽度。
这里是我的ViewTree和快照,它们在启动时和V1隐藏时。
[当在堆栈视图的排列的子视图上设置.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)
}
}