UINavigationBar появляется как полупрозрачный вместо непрозрачного белого
Это приложение, которое я конвертирую из iOS 6. Первоначально ViewController отображался под iOS 7 с содержимым основного представления под панелью навигации.
в представлении UI builder я отключил "под верхними барами" и "под нижними барами" в разделе "расширить края", чтобы решить эту проблему. Это сработало, однако, теперь на этом экране панель навигации кажется полупрозрачной (встречается как серый на скриншоте ниже).
Я пробовал явно устанавливая "верхнюю панель" на "непрозрачную панель навигации" в разделе "смоделированные Метрики", но это не влияет.
Я пробовал параметр:
self.navigationController.navigationBar.translucent = NO;
в моем init-коде ViewController, но это также не имеет никакого эффекта.
что я упустил?
UPDATE: если я установил self.navigationController.navigationBar.translucent = NO;
в моем первом ViewController в стеке он работает. Однако, до рассматриваемого ViewController, I do хотите полупрозрачный navbar. Только когда я добираюсь до вида. несколько слоев глубоко, что я хочу иметь непрозрачный бар (Этот вид не имеет прокручиваемых данных, поэтому нет смысла иметь его полупрозрачным).
вот скриншот того, что я вижу в навигационной панели:
4 ответов
проблема заключалась в том, что я звонил
self.navigationController.navigationBar.translucent = NO;
после того, как появился мой вид. Я переместил этот код в свой метод viewWillAppear, и теперь он отображается правильно:
вы можете попробовать ниже код...
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
и добавьте этот код в функцию viewDidLayoutSubviews...
вы можете установить его в приложение с помощью этого:
UINavigationBar.appearance().navigationBarAppearace.translucent = false
Я, как правило, делаю это в своем классе AppDelegate, когда приложение изначально загружается.
все, что вам нужно сделать для iOS6, это установить fullscreenlayout контроллера в NO, а затем нажать его на NavigationController
[controller setWantsFullScreenLayout:NO];