【问题标题】:Hide navigationBar?隐藏导航栏?
【发布时间】:2013-04-29 03:02:05
【问题描述】:

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

2) 另外,如果我返回 viewController 并且之前的 viewController 已通过相同的方法将导航栏设置为隐藏,为什么只有第三行代码工作 [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;,导航栏的空间会弹出但它只是白色,没有背景图像。如果我有两条线,它就可以工作并且有一个背景图像。

【问题讨论】:

    标签: ios uiviewcontroller uinavigationcontroller uinavigationbar


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您抽出宝贵时间来解决这个问题。我有点理解。但是,为什么我要使用一个而不是另一个?
    • 前两个可以互换;这是一种风格选择。但是,出于隐藏导航栏的目的,您希望使用 Apple 提供的文档化方法来隐藏导航栏,因为您无法保证 UINavigationController 中的 Apple 方法不会撤消您的更改,如果您使用第一个二。第三个保证它会隐藏,因为您不会手动弄乱导航栏的隐藏属性。
    • 谢谢!但是如果我只调用 [self.navigationController setNavigationBarHidden:NO]; 这个方法 [self.navigationController.navigationBar setBackgroundImage: 不起作用];而不是 self.navigationController.navigationBar.hidden 我认为他们改变了相同的属性?
    • 这是一个完全独立的问题和问题,您应该为它制作和发布代码。不工作到底是什么意思?您确保在导航栏上调用 - (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics,是的(我没有在评论中看到您对 forBarMetrics 的引用)?
    • 抱歉完整代码是:[self.navigationController.navigationBar setBackgroundImage:incorrectAnswerNavigationBarBackgroundImage forBarMetrics:UIBarMetricsDefault];只有当我有这两行时它才有效(设置背景图像,否则它只是白色): [self.navigationController setNavigationBarHidden:NO]; self.navigationController.navigationBar.hidden = NO;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2019-12-27
    • 2020-06-24
    相关资源
    最近更新 更多