Как менять и анимировать констрейнты: isActive, constant, layoutIfNeeded?
Суть
Менять layout в рантайме можно тремя способами, от дешёвого к дорогому: изменить constant у сохранённого констрейнта, поменять местами приоритеты двух optional-констрейнтов или деактивировать один набор и активировать другой. Пересоздавать констрейнты на каждое изменение, особенно в layoutSubviews, — антипаттерн: это constraint churn и лишняя работа движка.
Анимация во всех трёх случаях одна: сбросить отложенный layout, изменить констрейнты и в блоке анимации вызвать layoutIfNeeded() у общего предка. Анимируется результат раскладки, а не сам констрейнт.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep