Выбор ответа Middle UIKit обновлено
setNeedsLayout и layoutIfNeeded
Вопрос
Как анимировать изменение констрейнта?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Изменить constant, затем в animate вызвать layoutIfNeeded(). setNeedsLayout лишь помечает view к раскладке на следующем цикле обновления, анимационный блок к тому моменту уже закрыт. layoutIfNeeded выполняет раскладку немедленно, поэтому новые фреймы считаются внутри анимационного блока и…
Варианты ответа
- Вызвать
setNeedsLayout()внутри блокаUIView.animate - Изменить
constantвнутриUIView.animateбез других вызовов - Изменить
constant, затем вanimateвызватьlayoutIfNeeded()правильный ответ - Удалить и заново создать констрейнт в
viewDidAppear
Разбор
setNeedsLayout лишь помечает view к раскладке на следующем цикле обновления, анимационный блок к тому моменту уже закрыт. layoutIfNeeded выполняет раскладку немедленно, поэтому новые фреймы считаются внутри анимационного блока и анимируются. Изменение constant само по себе только помечает раскладку как устаревшую. Пересоздавать констрейнты для анимации не нужно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Задача на Swift: разница снимков для diffable data source
Следующий вопрос
Методы UIKit и момент вызова
Ещё по теме «UIKit»
- Неверная картинка в переиспользуемой ячейке
- Diffable data source и повторяющиеся идентификаторы
- Что делать в prepareForReuse
- reconfigureItems и reloadItems
- Ячейки с автоматической высотой
- Разница между frame и bounds
- Где брать финальный размер view
- Почему кнопка не получает нажатия