3

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

这是如何完成的?如果您只需将导航栏设置为隐藏或显示,就会立即发生。我无法弄清楚它是如何隐藏在一个视图控制器中的!

非常感谢,

迈克尔

回答

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更改很有用。

+0

是的但那会隐藏导航栏,当你推动另一个视图控制器时,它仍然是隐藏的。即使您在推新控制器时显示导航栏,您也会看到导航栏显示在前一个控制器上。这是因为导航栏对于导航控制器堆栈上的所有控制器都是相同的栏。因此,对于搜索显示控制器如何执行它的操作感到困惑! – 2009-11-20 01:14:01

+0

查看编辑答案。您可以在推送/弹出视图控制器时为导航栏设置动画。 – 2009-11-20 01:55:25

+0

啊啊不行!天才!我不知道在viewWillAppear/Disappear中放置显示/隐藏代码会对导航栏的显示方式产生任何影响!非常感谢,我在这个问题上被困了好几个小时! – 2009-11-20 02:10:24

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

它不会隐藏导航栏。

相关问题