2012-06-24 8 views
7

ho trovato il modo duro cheQual è la differenza tra navigationController.navigationBarHidden e navigationController.navigationBar.hidden?

navigationController.navigationBarHidden = NO; 

e

navigationController.navigationBar.hidden = NO; 

non sono la stessa cosa. Infatti, se uso la prima sintassi per nascondere la barra di navigazione, non posso usare la seconda sintassi per mostrarla: semplicemente non farà nulla. Inoltre, la prima sintassi per mostrare/nascondere la barra di navigazione funziona sempre per me, mentre la seconda sintassi funziona alcune volte, ma non sempre. Non sono stato in grado di determinare esattamente quando avrebbe funzionato e quando no.

Dato che ero bloccato a correggere il codice di qualcun altro (un'applicazione ragionevolmente grande: oltre 20 UIViewControllers), ho dovuto effettuare una ricerca globale per navigationBar.hidden e sostituirla con navigationBarHidden. Successivamente, ho dovuto effettuare una ricerca globale per navigationBar setHidden: e sostituirla con la sintassi navigationBarHidden. Questo alla fine ha risolto il problema.

Eppure, voglio capire perché sono fornite le due diverse opzioni e qual è la vera differenza tra loro.

risposta

4

navigationBarHidden applica un'animazione quando nascondendo o mostrando la durata navBar di questa navigazione potrebbe essere impostato utilizzando UINavigationControllerHideShowBarDuration

Dove navigationBar.hidden cambierà direttamente lo stato visiblity del UINavigationBar (che è una sottoclasse di UIView)

Dal UINavigationBar è una sottoclasse di UIView ha ereditato la proprietà bool nascosta, c'è modo di cambiarlo a protected o private

da apple docs

Il controller di navigazione è responsabile della gestione della configurazione e la visualizzazione della barra di navigazione e la navigazione barra degli strumenti. Non devi mai modificare queste viste direttamente. Invece, è necessario manipolarli con i metodi e le proprietà della classe UINavigationController . È possibile nascondere e mostrare la barra di navigazione utilizzando la proprietà navigationBarHidden o setNavigationBarHidden: animated: method.

+0

Ok, inizia a dare un senso. Ciò significa che non dovrei usare direttamente 'navigationBar.hidden', ma usare' navigationBarHidden' invece - giusto? –

+0

sì, questo sembra essere il caso, dal momento che hai una proprietà esplicita che nasconde e mostra la navBar –

+0

@AleksG leggi la risposta aggiornata –

Problemi correlati