首页 > 解决方案 > 当排列的子视图的高度都为零时,UIStackView 高度不为 0

问题描述

我想垂直 UIStackView 的高度应该是其排列视图的总高度。但是,当我将所有排列视图的框架高度更改为 0 时,即使调用 UIStackView 的帧高度仍然具有非零值view.layoutIfNeeded(),并且所有排列视图都消失了。我也尝试将Clip to BoundsUIStackView 设置为 true,但它仍然不起作用。这是我的代码:

override func viewDidLoad() {
  super.viewDidLoad()
  print("Before --- UIStackView.frame.height: \(stackView.frame.height)")
  print("Before --- firstLabel.frame.height: \(firstLabel.frame.height)")
  print("Before --- secondLabel.frame.height: \(secondLabel.frame.height)")
  print("Before --- thirdLabel.frame.height: \(thirdLabel.frame.height)")
  print("Before --- forthLabel.frame.height: \(forthLabel.frame.height)")
  for view in stackView.arrangedSubviews {
    view.frame = CGRect(x: view.frame.origin.x, y: view.frame.origin.y, width: view.frame.width, height: 0)
  }
  print("===================================")
  print("After --- UIStackView.frame.height: \(stackView.frame.height)")
  print("After --- firstLabel.frame.height: \(firstLabel.frame.height)")
  print("After --- secondLabel.frame.height: \(secondLabel.frame.height)")
  print("After --- thirdLabel.frame.height: \(thirdLabel.frame.height)")
  print("After --- forthLabel.frame.height: \(forthLabel.frame.height)")
  view.layoutIfNeeded()
}

这是日志:

Before --- UIStackView.frame.height: 82.0
Before --- firstLabel.frame.height: 20.5
Before --- secondLabel.frame.height: 20.5
Before --- thirdLabel.frame.height: 20.5
Before --- forthLabel.frame.height: 20.5
 ===================================
After --- UIStackView.frame.height: 82.0
After --- firstLabel.frame.height: 0.0
After --- secondLabel.frame.height: 0.0
After --- thirdLabel.frame.height: 0.0
After --- forthLabel.frame.height: 0.0

标签: iosiphoneswiftview

解决方案


使用堆栈视图,您可以简单地隐藏子视图以调整其高度。

for view in stackView.arrangedSubviews {
    view.isHidden = true
}

推荐阅读