2012-06-24 6 views
7

He encontrado la manera dura que¿Cuál es la diferencia entre navigationController.navigationBarHidden y navigationController.navigationBar.hidden?

navigationController.navigationBarHidden = NO; 

y

navigationController.navigationBar.hidden = NO; 

no son la misma cosa. De hecho, si uso la primera sintaxis para ocultar la barra de navegación, entonces no puedo usar la segunda sintaxis para mostrarla: simplemente no hará nada. Además, la primera sintaxis para mostrar/ocultar la barra de navegación siempre me funciona, mientras que la segunda sintaxis funciona algunas veces, pero no siempre. No he podido determinar exactamente cuándo funcionaría y cuándo no.

Como estaba atascado con la fijación del código de otra persona (una aplicación razonablemente grande: más de 20 UIViewControllers), tuve que hacer una búsqueda global de navigationBar.hidden y reemplazarla por navigationBarHidden. Después de eso, tuve que hacer una búsqueda global de navigationBar setHidden: y reemplazar con la sintaxis navigationBarHidden. Esto eventualmente solucionó el problema.

Sin embargo, quiero entender por qué se proporcionan las dos opciones diferentes y cuál es la diferencia real entre ellas.

Respuesta

4

navigationBarHidden aplica una animación cuando ocultar o mostrar la duración navBar de esta navegación se podría establecer mediante el uso de UINavigationControllerHideShowBarDuration

Dónde navigationBar.hidden cambiará directamente el estado de visibilidad de un UINavigationBar (que es una subclase de UIView)

Desde UINavigationBar es una subclase de UIView que heredó la propiedad bool oculto, no hay manera de cambiarlo a protegida o privada

de apple docs

El controlador de navegación se encarga de gestionar la configuración y la visualización de la barra de navegación y la navegación barra de herramientas. Nunca debe modificar estas vistas directamente. En cambio, usted debe manipularlos a través de los métodos y las propiedades de la clase UINavigationController. Puede ocultar y mostrar la barra de navegación utilizando la propiedad navigationBarHidden o setNavigationBarHidden: animado: método.

+0

Ok, empieza a tener sentido. Esto significa que no debería usar 'navigationBar.hidden' directamente, sino que usar' navigationBarHidden' en su lugar - ¿no? –

+0

sí, este parece ser el caso, ya que tiene una propiedad explícita que oculta y muestra el navBar –

+0

@AleksG por favor lea la respuesta actualizada –

Cuestiones relacionadas