隐藏导航条?
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)animated
在UINavigationController
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated
。 这是UINavigationController
适当的logging方法。