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. Только когда я добираюсь до вида. несколько слоев глубоко, что я хочу иметь непрозрачный бар (Этот вид не имеет прокручиваемых данных, поэтому нет смысла иметь его полупрозрачным).

вот скриншот того, что я вижу в навигационной панели:

Attempt to make bar white opaque have failed thus far in iOS 7...

4 ответов


проблема заключалась в том, что я звонил

self.navigationController.navigationBar.translucent = NO;

после того, как появился мой вид. Я переместил этот код в свой метод viewWillAppear, и теперь он отображается правильно:

Correct


вы можете попробовать ниже код...

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];