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

3
当你输入由搜索显示控制器处理的搜索栏时,它会将视图向上滑动并将导航栏一起推上去。这很容易做到,但是当你点击一个搜索结果并推入了导航控制器堆栈中的新视图时,导航栏从右侧滑入视图!
这是如何实现的?如果你只是设置导航栏为隐藏或显示,它会立即发生。我无法弄清楚它似乎只对堆栈中的一个视图控制器隐藏!
谢谢,
迈克尔
2个回答

8

您可以使导航栏的转换动画化。有关更多详细信息,请参阅-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更改非常有用。


是的,但那样会一直隐藏导航栏,当你推出另一个视图控制器时,它仍然会被隐藏。即使在推出新控制器时显示导航栏,你也会看到导航栏出现在先前的控制器上。这是因为导航栏是导航控制器堆栈中所有控制器共用的同一栏。因此,我们对搜索显示控制器如何实现其功能感到困惑! - Michael Waterfall
当视图控制器被推入/弹出时,您可以使导航栏动画化。 - Alex Reynolds
啊!太棒了!我从来没有想到将显示/隐藏代码放在viewWillAppear/Disappear中会对导航栏的显示方式产生任何影响!非常感谢,我在这个问题上被卡了好几个小时! - Michael Waterfall

0
-(void)viewDidLayoutSubviews{
    [self.navigationController setNavigationBarHidden:NO animated:NO];
}

它不会隐藏导航栏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接