Mostrar / ocultar la barra de navigation cuando la vista se presiona / aparece en iOS 8

Hola compañeros desarrolladores,

Me sorprende que no encontré ninguna información sobre ese caso de uso particular para iOS 8. Permítame explicarle que tengo una stack de controlleres de navigation, la primera vista tiene su barra de navigation oculta, cuando el usuario hace clic en una celda una nueva vista se presiona y necesito que la barra de navigation que se muestra en esta vista regrese (obviamente). En iOS 7, solo era cuestión de agregar esta línea a viewWillAppear:

[self.navigationController setNavigationBarHidden:NO animated:YES]; 

Y funciona como un encanto. Pero a partir de iOS 8, estoy luchando por tener el mismo comportamiento. Por ahora he logrado hacer lo mismo al usar:

 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) [self.navigationController setNavigationBarHidden:NO animated:NO]; } - (void)viewDidLoad { [super viewDidLoad]; if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { self.automaticallyAdjustsScrollViewInsets = NO; self.edgesForExtendedLayout = UIRectEdgeNone; self.collectionView.contentInset = UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height, 0, 0, 0); } } 

Y cambiando el contenido de mi colección collectionsView / tableviews todo lo que necesito para mostrar. Funcionará, pero es un verdadero dolor en el * (a veces, el recuadro de contenido no es necesario si el usuario proviene de un nuevo controller de vista).

Para el context, el proyecto se desarrolló por primera vez para manejar iOS 6 y 7, por lo que no hay storyboard, todo se realiza mediante progtwigción. Porté la aplicación a una base de código más moderna y la hice universal.

Me estoy perdiendo de algo ? ¿Hay una mejor manera de manejar eso en iOS 7/8?

Desea ocultarlo en la vista. viewWillAppear y mostrarlo nuevamente en la vista. viewWillDisappear

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) navigationController?.navigationBar.hidden = true } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) navigationController?.navigationBar.hidden = false } 

Pensé que la línea es:

 self.navigationController.navigationBar.hidden = YES; 

Lo reviso y funciona bien para mí. . . Intentalo . . .

Haga esto animado para get una transición sin problemas:

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

En iOS 8 , parece que navigationBarHidden no es lo mismo que navigationBar.hidden . (Estoy construyendo con el objective de implementación iOS 6 – no estoy seguro si esto marca la diferencia).

En mi código, mirando el depurador con las siguientes líneas consecutivas :

 bool b1 = self.navigationController.navigationBarHidden; // FALSE bool b2 = self.navigationController.navigationBar.hidden; // TRUE 

b1 muestra como falso y b2 como verdadero.

Establecer self.navigationController.navigationBar.hidden = false soluciona el problema

Tuve el mismo problema y realmente probé todo, pero la barra de navigation no apareció. Finalmente me di count de que tenía este código en mi primer controller de vista 🙂

 [self.navigationController setNavigationBarHidden:YES]; 

Pensé, alguien más que verifica esta pregunta, cometió mi error, así que pensé que valía la pena mencionarlo.