隐藏导航条?

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

2)为什么只有第三行代码工作,如果我回到一个viewController和前面的viewController已经设置navigationBar隐藏通过相同的方法[self.navigationController setNavigationBarHidden:NO]我的假设是,所有三条线一样的东西?

 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; 导航栏的空间会popup,但只是白色的,没有背景图片。 如果我有两条线,它的工作原理和背景图像。

前两个在function上是相同的; 不同的是一个使用点符号而另一个不使用。 这两个方法都是fire - (void) setHidden:(BOOL)hide在导航控制器的navigationBar属性上。

现在第三个是完全不同的方法。 它是- (void) setNavigationBarHidden:(BOOL)hide并在UINavigationController上定义。 这个工作的原因是这个方法是通知导航控制器你希望导航栏被隐藏,而前两个手动设置导航栏被隐藏。 如果UINavigationController调用任何修改导航栏的隐藏属性的方法,那么前两个的更改就会被撤消,为什么setNavigationBarHidden:方法被创build,所以你可以通过UINavigationController来告诉UINavigationController :不pipe它做什么,它都应该隐藏导航栏,而不是改变它显示。

编辑:对于这个问题的第二部分,你实际上需要调用- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animatedUINavigationController - (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated 。 这是UINavigationController适当的logging方法。