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

8
我发现了一种艰难的方式:
navigationController.navigationBarHidden = NO;

并且

navigationController.navigationBar.hidden = NO;

实际上,两种语法不是一回事。如果我使用第一种语法来隐藏导航栏,那么我就不能使用第二种语法来显示它:它根本不会起作用。此外,我的经验是,第一种语法总是有效的,而第二种语法有时有效,有时无效。但我无法确定何时它会生效,何时不会。
由于我被困在修复别人的代码中(一个相当大的应用程序:20多个UIViewControllers),所以我不得不全局搜索navigationBar.hidden并将其替换为navigationBarHidden。之后,我还必须全局搜索navigationBar setHidden:并将其替换为navigationBarHidden语法。最终,这解决了问题。
然而,我想了解为什么提供了两个不同的选项,它们之间的真正区别是什么。
1个回答

5

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

navigationBar.hidden 将直接改变 UINavigationBar (它是 UIView 的子类) 的可见状态。

由于 UINavigationBarUIView 的子类,因此它继承了隐藏 bool 属性,无法将其更改为 protected 或 private。

来自 apple 文档

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


好的,现在开始有意义了。这意味着我不应该直接使用 navigationBar.hidden,而是应该使用 navigationBarHidden - 对吗? - Aleks G
是的,这似乎是正确的,因为您有一个显式属性来隐藏和显示导航栏。 - Omar Abdelhafith
好的,现在这完全有意义了。谢谢。 - Aleks G
@OmarAbdelhafith 为什么我们不应该直接使用 UIView@hidden 属性?UINavigationController@navigationBarHidden 属性的默认值是否会覆盖它? - KarenAnne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接