2012-06-24 13 views
7

znalazłem się na własnej skórze, żeJaka jest różnica między navigationController.navigationBarUkryty i navigationController.navigationBar.hidden?

navigationController.navigationBarHidden = NO; 

i

navigationController.navigationBar.hidden = NO; 

nie to samo. W rzeczywistości, jeśli użyję pierwszej składni, aby ukryć pasek nawigacji, nie mogę użyć drugiej składni, aby to pokazać: po prostu nic nie zrobi. Co więcej, pierwsza składnia do pokazywania/ukrywania paska nawigacji zawsze działa dla mnie, podczas gdy druga składnia działa czasami, ale nie zawsze. Nie potrafiłem dokładnie określić, kiedy to zadziała, a kiedy nie.

Gdy utknąłem przy naprawianiu kodu innej osoby (rozsądnie duża aplikacja: ponad 20 UIViewControllers), musiałem przeprowadzić globalne wyszukiwanie pod kątem navigationBar.hidden i zastąpić je navigationBarHidden. Następnie musiałem przeprowadzić globalne wyszukiwanie pod kątem navigationBar setHidden: i zastąpić je składnią navigationBarHidden. To ostatecznie naprawiło problem.

Chciałbym jednak zrozumieć, dlaczego podane są dwie różne opcje i jaka jest prawdziwa różnica między nimi.

Odpowiedz

4

navigationBarHidden dotyczy animację gdy ukrywanie lub pokazywanie czasu NavBar tej nawigacji można ustawić za pomocą UINavigationControllerHideShowBarDuration

Gdzie navigationBar.hidden będzie bezpośrednio zmienić status visiblity o UINavigationBar (która jest podklasą UIView)

od UINavigationBar jest podklasą UIView odziedziczyła ukrytą właściwość bool, nie ma mowy o zmianie jej do chronionego lub prywatnego

od apple docs

Kontroler nawigacyjny jest odpowiedzialny za zarządzanie konfiguracją i wyświetlanie paska nawigacji i żeglugi pasku narzędzi. Nigdy nie wolno bezpośrednio modyfikować tych widoków. Zamiast tego, użytkownik powinien manipulować nimi za pomocą metod i właściwości klasy UINavigationController. Możesz ukryć i wyświetlić pasek nawigacyjny przy użyciu właściwości navigationBarHidden lub setNavigationBarHidden: animated: method.

+0

OK, zaczyna to mieć sens. Oznacza to, że nie powinienem używać bezpośrednio 'navigationBar.hidden', ale zamiast tego użyj' navigationBarHidden' - prawda? –

+0

Tak, wydaje się, że tak jest, ponieważ masz jawną właściwość, która ukrywa i pokazuje navBar –

+0

@AleksG przeczytaj zaktualizowaną odpowiedź –

Powiązane problemy