navigationController.navigationBarHidden和navigationController.navigationBar.hidden有什么区别?

时间:2012-06-24 11:49:20

标签: iphone ios uinavigationbar navigationbar

我发现了很难的方式

navigationController.navigationBarHidden = NO;

navigationController.navigationBar.hidden = NO;

不是一回事。事实上,如果我使用第一种语法来隐藏导航栏,那么我就不能使用第二种语法来显示它:它根本不会做任何事情。此外,显示/隐藏导航栏的第一种语法总是适用于我,而第二种语法有效,但并非总是如此。我无法准确确定它什么时候起作用,什么时候不起作用。

由于我不得不修复其他人的代码(一个相当大的应用程序:超过20个UIViewControllers),我不得不对navigationBar.hidden进行全局搜索并将其替换为navigationBarHidden。之后,我必须对navigationBar setHidden:进行全局搜索,并使用navigationBarHidden语法替换。这最终解决了这个问题。

然而,我想了解为什么提供两种不同的选项以及它们之间的真正区别是什么。

1 个答案:

答案 0 :(得分:4)

navigationBarHidden在隐藏或显示此导航的navBar持续时间时应用动画可以使用UINavigationControllerHideShowBarDuration设置

其中navigationBar.hidden将直接更改UINavigationBarUIView的子类)的可见性状态

由于UINavigationBarUIView的子类,它继承了隐藏的bool属性,无法将其更改为受保护或私有

来自apple docs

  

导航控制器负责管理   配置和显示导航栏和导航   工具栏。您绝不能直接修改这些视图。相反,你   应该通过方法和属性来操纵它们   UINavigationController类。您可以隐藏并显示导航栏   使用navigationBarHidden属性或   setNavigationBarHidden:animated:method。