2012-06-24 3 views
7

я нашел трудный путь, чтоВ чем разница между navigationController.navigationBarHidden и navigationController.navigationBar.hidden?

navigationController.navigationBarHidden = NO; 

и

navigationController.navigationBar.hidden = NO; 

являются не то же самое. Фактически, если я использую первый синтаксис, чтобы скрыть панель навигации, то я не могу использовать второй синтаксис, чтобы показать его: он просто ничего не сделает. Более того, первый синтаксис для отображения/скрытия навигационной панели всегда работает для меня, а второй синтаксис работает несколько раз, но не всегда. Я не смог точно определить, когда это будет работать, а когда нет.

Как я застрял с закреплением чужого кода (достаточно большой приложения: более 20 UIViewControllers), я должен был сделать глобальный поиск по navigationBar.hidden и заменить его navigationBarHidden. После этого мне пришлось выполнить глобальный поиск по navigationBar setHidden: и заменить на синтаксис navigationBarHidden. В конечном итоге это решило проблему.

Тем не менее, я хочу понять, почему предлагаются два разных варианта и какова реальная разница между ними.

ответ

4

navigationBarHidden применяет анимацию при скрытом или с указанием продолжительности NavBar этой навигации может быть установлен с помощью UINavigationControllerHideShowBarDuration

Где navigationBar.hidden будет непосредственно изменить статус visiblity в UINavigationBar (который является подклассом UIView)

Поскольку UINavigationBar подкласс UIView он унаследовал скрытое ее свойство, ни способа его изменений в защищенном или частной

с apple docs

Контроллер навигации отвечает за управление конфигурацией и отображением панели навигации и навигации панели инструментов. Вы никогда не должны изменять эти представления напрямую. Вместо этого вы должны использовать с помощью методов и свойств класса UINavigationController . Вы можете скрыть и показать навигационную панель с помощью свойства navigationBarHidden или setNavigationBarHidden: анимированный: метод.

+0

Хорошо, это начинает иметь смысл. Это означает, что я не должен использовать 'navigationBar.hidden' напрямую, но вместо этого использовать' navigationBarHidden' - правильно? –

+0

Да, похоже, это так, поскольку у вас есть явное свойство, которое скрывает и показывает navBar –

+0

@AleksG, пожалуйста, прочитайте обновленный ответ –