Настройка UINavigationBar не работает из-за странной иерархии представлений UINavigationBar
В моем приложении много ViewController'ов, которые помещаются в стек навигации.
Я настроил внешний вид UINavigationBar глобально в AppDelegate, как показано ниже.
let appearance = UINavigationBar.appearance()
appearance.barTintColor = myColor
appearance.tintColor = .white
appearance.isTranslucent = false
let textAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white,
NSAttributedString.Key.font: myFont, size: mySize)]
appearance.titleTextAttributes = textAttributes as [NSAttributedString.Key : Any]
Все ViewController работают должным образом, кроме одного ViewController.
Ниже приведен один из VC, который работает как положено. Он показывает нужный мне цвет и шрифт.
А ниже - ViewController, который выглядит иначе, чем другие.
Я не могу понять причину, по которой только одна панель навигации в этом VC показывает другой вид.
Итак, я сделал отладку иерархии представлений.
Ниже представлена иерархия представлений венчурных капиталистов, которая работает должным образом.
А ниже представлена иерархия представлений VC, которая выглядит странно.
Как видно на рисунке, проблемная панель навигации имеет еще два уровня: UIVisualEffectView и UIVisualEffectBackdropView.
Я опытный разработчик iOS и понятия не имею, почему это происходит.
Я внимательно проверил все настройки, связанные с NavigationBar на IB, но не нашел отличий от других.
Я даже удалил ViewController, полностью внедрил NavigationController и безуспешно пересобирал их с нуля.
Пожалуйста, объясните мне, почему только этот NavigationBar имеет другую структуру.
Я работаю над iOS 13.3 и Xcode 11.3.1
1 ответ
Работая здесь на iOS15, я пробовал много вещей, чтобы настроить внешний вид панели навигации, чтобы добиться простого непрозрачного цвета, кроме этого ничего не работало:
В viewDidLoad
if (@available(iOS 13.0, *)) {
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.backgroundColor = [UIColor orangeColor];
self.navigationController.navigationBar.standardAppearance = appearance;
self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
}
Быстрая версия:
let appearance = UINavigationBarAppearance()
appearance.backgroundColor = .orange
navigationBar.standardAppearance = appearance;
navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance
Наконец, если вы хотите применить это только к текущему контроллеру и восстановить панель навигации по умолчанию, просто сделайте то же самое, но с новым UINavigationBarAppearance () в viewWillDisappear.