auto.navigationController.navigationBar setHidden: NO no funciona cuando los controlleres de vista se intercambian

Estoy experimentando un comportamiento extraño con la ocultación y mostrando el UINavigationBar.

En mi método de vista viewWillAppear a esto:

 self.navigationController.navigationBar.hidden = YES; 

y cuando el usuario presiona un button, estoy llamando a esto:

 self.navigationController.navigationBar.hidden = NO; 

y luego intercambiar el controller de vista actual usando la propiedad viewControllers de un UINavigationController personalizado.

Esto funciona bien, pero si trato de mostrar la viewWillDisappear navigation utilizando la misma línea en el método viewWillDisappear , no funciona. La barra de navigation todavía está oculta.

Soy capaz de mostrar / ocultar la barra de estado en la vista viewWillDisappear utilizando el siguiente método:

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

¡pero mostrar / ocultar UINavigationBar no funciona!

EDIT: También, self.navigationController.isNavigationBarHidden devuelve NO después de intentar mostrar la barra en la vista viewWillDisappear pero la barra aún está oculta.

Cualquier ayuda sería muy apreciada. ¡Gracias!

Debido a que ya ha cambiado el controller de vista actual de la stack, self.navigationController es probablemente nil cuando se viewWillDisappear .

Es mejor no self.navigationController posts de self.navigationController viewWillDisappear self.navigationController desde la vista viewWillDisappear tan ansioso señalado, ya que puede ser nil . En lugar de aferrarse a una reference, recomiendo editar la propiedad navigationBarHidden siempre desde dentro de viewWillAppear como en esta respuesta https://stackoverflow.com/a/27748007/2248638 . Tengo una propiedad BOOL navigationBarHidden en mi class base UIViewController , de modo que solo necesito configurar la propiedad una vez para los controlleres de vista que están ocultos.

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:self.navigationBarHidden animated:animated]; }