0

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;导航栏弹出的空间但它只是白色,则没有背景图像。如果我有两条线,它就可以工作并且有一个背景图像。

4

1 回答 1

2

前两个在功能上是相同的;不同之处在于一个使用点表示法,而另一个不使用。这两种方法都在导航控制器- (void) setHidden:(BOOL)hide上的属性上触发。navigationBar

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

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

于 2013-04-29T03:12:55.390 回答