Цвет UINavigationBar неожиданно меняется

В моем текущем UINavigationController стек viewControllers выглядит так. 1 -> 2 -> 3. Однако перед переходом со 2-го контроллера на 3-й я сначала вставляю 2-й, чтобы при открытии 3-го контроллера 1-й контроллер находился сверху.

[self.navigationController popViewControllerAnimated:NO];
[self.navigationController pushViewController:controller animated:YES ] ;

Но каким-то образом это меняет цвет навигационной панели с исходного синего по умолчанию на черный стиль. Явная установка barStyle на UIBarStyleDefault в новом контроллере viewWillAppear или viewWillDisappear не имеет никакого эффекта. Что странно, если я вообще установлю barStyle, даже переход 1 -> 2 приведет к изменению цвета полосы на черный.

К концу написания этого поста я понял, что следующий код исправил это.

navBar.barStyle = UIBarStyleDefault-1;

Зачем мне нужно вычитать 1 из значения по умолчанию, чтобы на самом деле получить цвет по умолчанию?


person oohaba    schedule 20.12.2009    source источник
comment
что еще более важно, как вы это узнали?   -  person Kenny Winker    schedule 20.12.2009
comment
В viewWillAppear я заметил, что установка barStyle на UIBarStyleDefault привела к UIBarStyleBlack, который равен +1 в перечислении, поэтому я решил, что он был отключен на единицу. Я еще не пробовал тестировать это в отдельном проекте.   -  person oohaba    schedule 20.12.2009
comment
Что делает NSLog (@% i, UIBarStyleDefault); сказать? Возможно, вы каким-то образом попали в ситуацию, когда код и библиотека контроллера навигации какао были скомпилированы с другой версией файла заголовка, который определяет это перечисление? (Понятия не имею, как это могло случиться!)   -  person deanWombourne    schedule 20.12.2009


Ответы (2)


Я столкнулся с той же проблемой. У меня нет официального ответа, но я исправил его по-своему:

-(void)viewWillAppear:(BOOL)animated { 
UIColor *navColor = [[UIColor alloc]initWithRed:0.742778 green:0.0181208 blue:0.0271147 alpha:1];
[self.navigationController.navigationBar setTintColor:navColor];}

Я бы хотел, чтобы кто-нибудь мог предложить лучший ответ.

person emmy    schedule 26.07.2011

Вторую я бы не лопнул, просто выдвинул третью. И когда вы отказываетесь от 3-го использования

[self.parentViewController.parentViewController popViewControllerAnimated:YES];

Это касается меня, очищает стек и оставляет меня на контроллере 1 без отображения контроллера 2 со всеми нормальными атрибутами.

person nolimitsdude    schedule 30.11.2010