2013-06-19 1 views
2

Я испытываю какое-то странное поведение со скрытием и показом UINavigationBar.self.navigationController.navigationBar setHidden: НЕТ не работает, когда диспетчеры просмотра заменены.

В моем viewWillAppear метода, который я звоню это:

self.navigationController.navigationBar.hidden = YES; 

и когда пользователь нажимает на кнопку Я звоню это:

self.navigationController.navigationBar.hidden = NO; 

, а затем замену из текущего контроллера просмотра с помощью свойство viewControllers пользовательского UINavigationController.

Это работает нормально, но если я попытаюсь показать навигационную панель с использованием той же строки в методе viewWillDisappear, это не сработает. Навигация по-прежнему скрыт.

Я могу показать/скрыть строку состояния в viewWillDisappear, используя следующий метод:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 

но показывает/скрывает UINavigationBar не работает!

EDIT: Кроме того, self.navigationController.isNavigationBarHidden возвращает NO после того, как попытаюсь показать планку в viewWillDisappear, но планка по-прежнему скрыта.

Любая помощь будет принята с благодарностью. Спасибо!

+0

Что именно вы подразумеваете под "заменой"? – jakenberg

+0

Жаль, что я не понял. Я имел в виду в моем подклассе UINavigationController У меня есть метод, который изменяет контроллеры представлений. Например: 'self.viewControllers = @ [viewController1];' где viewController1 - это новый контроллер, который я хочу видеть на экране, чтобы заменить текущий контроллер представления. –

ответ

10

Поскольку вы уже поменяли текущий контроллер изображения из стека, self.navigationController, вероятно, nil, когда вызывается viewWillDisappear.

+3

Это было глупо со мной. Вы были правы, заменив контроллеры на «self.navigationController» nil. Все, что мне нужно было сделать, это сохранить ссылку на self.navigationController, а затем вызвать 'self.myLocalNavigationControllerReference.navigationBar.hidden = NO;' в viewWillDisappear, чтобы снова отобразить панель навигации. Спасибо! –

+1

спасибо, тоже помогли! – marchinram

1

Вам лучше не отправлять сообщения self.navigationController от viewWillDisappear как хотелось бы, так как это может быть nil. Вместо того, чтобы держаться за ссылку, я рекомендую редактировать свойство navigationBarHidden всегда с viewWillAppear, как в этом ответе https://stackoverflow.com/a/27748007/2248638. У меня есть свойство BOOL navigationBarHidden на моем базовом классе UIViewController, поэтому мне нужно только установить свойство один раз для скрытых скрытых диспетчеров вида.

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self.navigationController setNavigationBarHidden:self.navigationBarHidden animated:animated]; 
} 
Смежные вопросы