У меня есть UIView
с некоторыми ярлыками. Метки имеют динамическую высоту в зависимости от текста, и они имеют вертикальные ограничения интервала между родительским видом и друг с другом, задавая родительскому виду его высоту. Ограничение между нижней частью последней метки и нижней частью родительского представления имеет более низкий приоритет.
Кроме того, родительское представление имеет ограничение по высоте, которое я установил на 0 в viewDidLoad
. Это сворачивает представление и сдвигает все метки вниз, поскольку последнее нижнее ограничение имеет более низкий приоритет. Затем у меня есть кнопка, с помощью которой я переключаю ограничение высоты родительского представления, которое открывает/закрывает его:
@IBAction func viewInfoButtonTapped(_ sender: Any) {
viewInfoButton.isSelected = !viewInfoButton.isSelected
self.infoHeightConstraint.isActive = !self.viewInfoButton.isSelected
UIView.animate(withDuration: 0.25) {
self.view.layoutIfNeeded()
}
}
Моя проблема в том, что динамическая высота меток не устанавливается до тех пор, пока я не раскрою родительский вид в первый раз, поэтому вместо анимации, в которой метки просто открываются, я получаю эффект, когда они раскрываются и растут в высоту одновременно время. После первого расширения были заданы высоты, а последующие расширения дают правильный эффект.
Как я могу заставить представление правильно размещать ограничения, прежде чем оно будет расширено в первый раз? Я пытался вызвать setNeedsLayout()
и layoutIfNeeded()
, но, похоже, это не дало результата.