Многочисленные учебники по анимации ограничений AutoLayout предлагают обновить свойство константы ограничения и затем вызвать layoutIfNeeded()
в блоке анимации.
Моя ситуация немного сложная.У меня есть мнение, что дома 3 подпредставления.Высота этого суперпредставления не фиксирована - он рассчитывается как сумма высот его подпредставлений.В некоторых случаях я прошу одно из этих 3 подпредставлений переключить его высоту (она изменяется от 0 до 30, т.е. я хочу плавно скрыть и показать ее).Код похож на это:
// In superview
subview1.isVisibleInContext = !subview1.isVisibleInContext
// In subview
class MySubview: UIView {
@IBOutlet var heightConstraint: NSLayoutConstraint!
var isVisibleInContext = false {
didSet {
updateHeight()
}
}
func toggleHeight() {
let newHeight = isVisibleInContext ? 30 : 0
layoutIfNeeded()
heightConstraint.constant = newHeight
UIView.animate(withDuration: 0.8) {
self.layoutIfNeeded()
}
}
}
К сожалению, это не работает, как я ожидаю.Я вижу плавное изменение высоты моего подпредставления, но высота моего суперпредставления пересчитывается сразу после того, как я установил новое значение для ограничения высоты подпредставления.
Я хочу видеть высоту суперпредставления постепенноувеличивается / уменьшается по мере увеличения или уменьшения числа его подпредставлений.
Пожалуйста, кто-нибудь направит меня в правильном направлении.Любая помощь приветствуется.
Большое спасибо!