搜索显示控制器如何隐藏导航栏?

Posted

技术标签:

【中文标题】搜索显示控制器如何隐藏导航栏?【英文标题】:How does the search display controller hide the navigation bar? 【发布时间】:2009-11-20 00:34:38 【问题描述】:

当您进入由搜索显示控制器处理的搜索栏时,它会向上滑动视图并将导航栏向上推。这很容易做到,但是,当您单击搜索结果并将新视图推送到导航控制器的堆栈时,导航栏会从右侧滑入视图!

这是怎么做到的?如果您只是将导航栏设置为隐藏或显示,它会立即发生。我无法弄清楚它似乎是如何仅针对堆栈中的一个视图控制器隐藏的!

非常感谢,

迈克尔

【问题讨论】:

【参考方案1】:

您可以为导航栏的过渡设置动画。详情请见-setNavigationBarHidden:animated:

如果您需要基于每个视图控制器执行此操作,只需覆盖视图控制器的 -viewDidAppear:-viewWillDisappear: 方法,例如:

- (void) viewDidAppear:(BOOL)animated 
    [super viewDidAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];


- (void) viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];

当这个视图控制器被推到导航堆栈顶部时,上面将隐藏导航栏,并在视图控制器弹出时显示导航栏。

您可以随时致电-setNavigationBarHidden:animated:,但这两种方法对于应用大量 UI 更改很有用。

【讨论】:

是的,但是从那时起导航栏会隐藏起来,当你推送另一个视图控制器时它仍然会被隐藏。即使您在推动新控制器时显示导航栏,您也会看到导航出现在前一个控制器上。这是因为导航栏对于导航控制器堆栈上的所有控制器来说都是同一个栏。因此,对于搜索显示控制器的工作方式感到困惑! 查看编辑后的答案。您可以在推送/弹出视图控制器时为导航栏设置动画。 啊,不可能!天才!我不知道将显示/隐藏代码放在 viewWillAppear/Disappear 中会对导航栏的显示方式产生任何影响!非常感谢,我在这个问题上被难住了好几个小时!【参考方案2】:
-(void)viewDidLayoutSubviews
    [self.navigationController setNavigationBarHidden:NO animated:NO];

它不会隐藏导航栏。

【讨论】:

以上是关于搜索显示控制器如何隐藏导航栏?的主要内容,如果未能解决你的问题,请参考以下文章

执行 push segue 后,当给搜索栏焦点时,导航栏隐藏

在一个视图控制器上隐藏导航栏,在推送的控制器上显示它

iOS:在导航栏中显示搜索栏时隐藏范围栏

如何在导航栏内隐藏 UISearchController

在导航控制器中默认隐藏 UITableView 搜索栏

带导航栏的搜索控制器