Это работает для меня:
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
Тогда вам не понадобится один в viewDidLoad.
Если из этого изменения не ясно, причина, по которой ваш исходный код не помогработа заключается в том, что представление может храниться в памяти, даже если оно не на экране, поэтому необходимо скрывать / отображать панель навигации каждый раз, когда представление выводится на экран или выключается.