隐藏其中一个视图时如何自动调整 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)
}
}
我有一个带有 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)
}
}