1) 下面三行代码的区别是什么?
2)如果我返回到一个viewController,而之前的viewController已经将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;,导航栏的空间会弹出,但它只是白色的,没有背景图像。如果我有这两条线,它可以工作,并有一个背景图像。
发布于 2013-04-29 03:12:55
前两种方法在功能上是相同的;区别在于,一种使用点表示法,另一种则不使用。这两种方法都在导航控制器上的- (void) setHidden:(BOOL)hide属性上触发navigationBar。
第三种是完全不同的方法。它是- (void) setNavigationBarHidden:(BOOL)hide,是在UINavigationController上定义的。之所以这样做是因为这个方法告诉导航控制器您希望导航条是隐藏的,而前两个手动设置导航条是隐藏的。如果UINavigationController调用任何修改导航栏隐藏属性的方法,则会取消前两个方法的更改,因此创建setNavigationBarHidden:方法是为了告诉UINavigationController,不管它做了什么,它都应该隐藏导航条,而不是将其更改为显示。
编辑:对于这个问题的第二部分,您实际上需要在UINavigationController上调用UINavigationController。这是正确的UINavigationController文档化方法。
https://stackoverflow.com/questions/16270616
复制相似问题