Ios 隐藏导航栏?

Ios 隐藏导航栏?,ios,uiviewcontroller,uinavigationcontroller,uinavigationbar,Ios,Uiviewcontroller,Uinavigationcontroller,Uinavigationbar,1) 下面三行代码之间的区别是什么? 2) 另外,如果我返回到一个viewController,并且前一个viewController通过相同的方法将navigationBar设置为hidden,那么为什么只有第三行代码可以工作 self.navigationController.navigationBar.hidden = NO; [self.navigationController.navigationBar setHidden:NO]; [self.navigationController

1) 下面三行代码之间的区别是什么?

2) 另外,如果我返回到一个viewController,并且前一个viewController通过相同的方法将navigationBar设置为hidden,那么为什么只有第三行代码可以工作

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

前两个功能相同;区别在于一个使用点符号,而另一个不使用点符号。这两种方法都在导航控制器的
导航栏
属性上激发
-(void)setHidden:(BOOL)hide

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


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

的适当文档化方法,感谢您花时间解决这个问题。我有点理解不了。然而,为什么我要使用一个而不是另一个呢?对于前两个,你可以交换它们;这是一种风格选择。但是,为了隐藏导航栏,您需要使用Apple提供的文档化方法来隐藏导航栏,因为如果您使用前两种方法,您无法保证UINavigationController中的Apple方法不会撤消您的更改。第三个可以保证它会隐藏,因为您不会手动破坏navigationBar的隐藏属性。谢谢!但是,如果仅调用[self.navigationController setNavigationBarHidden:否],则此方法[self.navigationController.navigationBar setBackgroundImage:不起作用;而不是self.navigationController.navigationBar.hidden我以为他们更改了相同的属性?这是一个完全不同的问题,您应该为其制作和发布代码。不工作到底是什么意思?您一定要调用-(void)setBackgroundImage:(UIImage*)backgroundImage for barmetrics:(UIBarMetrics)导航栏上的barMetrics,是的(我没有看到您在评论中引用barMetrics)?抱歉,完整代码是:[self.navigationController.navigationBar setBackgroundImage:incorrectAnswerNavigationBarBackgroundImage forBarMetrics:UIBarMetricsDefault];它只起作用(设置背景图像,否则它只是白色)如果我有这两行:[self.navigationController setNavigationBarHidden:NO];self.navigationController.navigationBar.hidden=NO;