Контекст:
Скажем, у нас есть один NavigationController
и 2 viewControllers.
ViewControllerA
имеет синюю навигационную панель, а ViewControllerB
имеет зеленый цвет.
Я установил их так:
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.navigationBar.barTintColor = UIColor.blue // Green if ViewController B
}
Это хорошо работает, когда я получил от A до B, но когда я вернусь, theTalkBar teint обновляется после. Например, если он был настроен в viewDidAppear
.
Ожидаемое:
На навигационной панели должен быть обновлен цвет навигационной панели без задержки.
Решения:
-
Я видел этот qaru.site/info/359057/... пост, и я попробовал решение. Это сработало, но сделало бы управление навигационной панелью более сложным и болезненным. (в реальном приложении)
-
Я попытался изменить тэп-навигатор в методе
ViewWillDisappear
. Не работает.
Дополнительно:
Это вызвано изменением API ios10. Я прочитал примечания к выпуску, но пока неясно, что делать в этом случае.
В iOS 10 UIKit имеет обновленное и унифицированное фоновое управление для UINavigationBar, UITabBar и UIToolbar. В частности, изменения фоновые свойства этих представлений (например, фон или тень изображения или настройка стиля бара) может начать прохождение макета для для разрешения нового фона.
В частности, это означает, что попытки изменить внешний вид этих баров внутри layoutSubviews, - [UIView updateConstraints], viewWillLayoutSubviews, viewDidLayoutSubviews, updateViewConstraints, или любой другой метод, который вызывается в ответ на макет, может привести к цикл компоновки.
В некоторых случаях вы можете разбить эти схемы компоновки, гарантируя, что вы всегда используйте один и тот же экземпляр объекта, когда объекты (такие как UIImage или UIColor). Но в целом вам следует избегать этого.
Вопрос:
Каким будет лучший способ обработки изменений панели навигации между различными контроллерами навигации в iOS 10?