7

我发现很难

navigationController.navigationBarHidden = NO;

navigationController.navigationBar.hidden = NO;

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

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

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

4

1 回答 1

4

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

其中navigationBar.hidden 会直接改变UINavigationBar( 的子类UIView)的可见性状态

由于UINavigationBar它的子类UIView继承了隐藏的布尔属性,因此无法将其更改为受保护或私有

来自苹果文档

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

于 2012-06-24T11:55:21.157 回答