Высота UIStackView не равна 0, когда высота упорядоченных подпредставлений равна нулю - PullRequest
0 голосов
/ 09 июня 2018

Я полагаю, высота вертикального UIStackView должна быть общей высотой его упорядоченных видов.Однако, когда я изменяю высоту кадра всех упорядоченных видов на 0, высота кадра UIStackView по-прежнему имеет ненулевое значение, даже если вызывается view.layoutIfNeeded(), и все упорядоченные виды исчезают.Я также попытался установить значение Clip to Bounds UIStackView в 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

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

С помощью стековых представлений вы можете просто скрыть подпредставления, чтобы отрегулировать их высоту.

for view in stackView.arrangedSubviews {
    view.isHidden = true
}
0 голосов
/ 09 июня 2018

Я думаю, что вы используете смесь автоматического макета и настройки кадров вручную.Чтобы увидеть, что все работает как положено, вместо того, чтобы устанавливать рамки меток на высоту 0, установите для их свойства text пустую строку (в результате получается intrinsicContentSize с высотой 0):

// Your print statements BEFORE...

for arrangedSubview in stackView.arrangedSubviews {
    if let label = arrangedSubview as? UILabel {
        label.text = ""
    }
}
view.layoutIfNeeded()

// Your print statements AFTER...

Результат:

result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...