Я обнаружил проблему примерно через 3 дня исследования и получил ответ всего за пару минут:
В некоторой точке кода был блок анимации:
UIView.animate(withDuration: 1, animations: {
self.view.layoutIfNeeded()
})
Я не знаю почему, но это привело к тому, что все макеты были анимированы до конца жизни контроллера (даже после завершения анимации)
Так что, чтобы обойти это, я попробовал это:
UIView.animate(withDuration: 1, animations: {
DispatchQueue.main.async {
self.view.layoutIfNeeded()
}
})
Проблема решена НО !!! появилась новая проблема: Оригинальная анимация вообще не работает!
Так что для окончательного решения я немного изменил код:
DispatchQueue.main.async {
UIView.animate(withDuration: 1, animations: {
self.view.layoutIfNeeded()
})
}
И, к счастью, это работает!Я знал:
все пользовательские интерфейсы должны выполняться в основном потоке
, а также блоки анимации не захватывают себя и выполняют свою работу в текущем потоке.но странным образом.