隐藏导航栏?

时间:2013-04-29 03:02:06

标签: ios uiviewcontroller uinavigationcontroller uinavigationbar

1)以下三行代码有什么区别?

2)另外,为什么只有第三行代码才有效,如果我返回到viewController并且之前的viewController已经通过相同的方法[self.navigationController setNavigationBarHidden:NO]将navigationBar设置为隐藏我的假设是所有三行都做同样的事情?

self.navigationController.navigationBar.hidden = NO;
[self.navigationController.navigationBar setHidden:NO];
[self.navigationController setNavigationBarHidden:NO];

跟进:

为什么我需要运行此代码:

[self.navigationController.navigationBar setBackgroundImage:incorrectAnswerNavigationBarBackgroundImage forBarMetrics:UIBarMetricsDefault]; 

它只能工作,正在设置背景图像,否则导航栏只是白色。

如果我有这两行:

[self.navigationController setNavigationBarHidden:NO]; 
self.navigationController.navigationBar.hidden = NO;

如果我遗漏self.navigationController.navigationBar.hidden = NO;,导航栏的空间会弹出,但它只是白色,没有背景图像。如果我有两条线它有效并且有背景图像。

1 个答案:

答案 0 :(得分:2)

前两个在功能上是相同的;差异是一个使用点符号而另一个没有。这两种方法都会在导航控制器上的- (void) setHidden:(BOOL)hide属性上触发navigationBar

现在第三个是完全不同的方法。它是- (void) setNavigationBarHidden:(BOOL)hide,在UINavigationController上定义。这个方法的原因是这个方法是通知导航控制器你希望隐藏导航栏,而前两个手动设置导航栏是隐藏的。如果UINavigationController调用任何修改导航栏隐藏属性的方法,则会撤消前两个更改,因此创建setNavigationBarHidden:方法的原因是为了让您有办法通知UINavigationController无论它做什么,它都应该隐藏导航栏而不是将其更改为显示。

编辑:对于此问题的第二部分,您实际上需要在- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated上调用UINavigationController。这是UINavigationController的正确记录方法。