DevPrep

Все темы › Auto Layout

Как менять и анимировать констрейнты: isActive, constant, layoutIfNeeded?

Middle PRO

Суть

Менять layout в рантайме можно тремя способами, от дешёвого к дорогому: изменить constant у сохранённого констрейнта, поменять местами приоритеты двух optional-констрейнтов или деактивировать один набор и активировать другой. Пересоздавать констрейнты на каждое изменение, особенно в layoutSubviews, — антипаттерн: это constraint churn и лишняя работа движка.

Анимация во всех трёх случаях одна: сбросить отложенный layout, изменить констрейнты и в блоке анимации вызвать layoutIfNeeded() у общего предка. Анимируется результат раскладки, а не сам констрейнт.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store