如果在UINavigationController中的某一个UIViewController中使用了UISearchDisplayController,那么当我们使用search功能时,会隐藏NavigationBar,使用完以后会再让NavigationBar出现。当我们从UISearchDisplayController的搜索结果中选中一个cell,来在UINavigationController显示中显示一个新的UIViewController时,在这个新的UIViewController中的viewDidLoad和viewWillAppear中,setNavigationBarHidden:YES 都会失效。原因就是在使用UISearchDisplayController的时候,它接管了NavigationBar显示与否的控制,使我们的设置失效。我在stackoverflow中搜了一下,有这样的一个解决办法:
在需要显示的新的UIViewController中,加入如下代码:
-(void) viewWillLayoutSubviews{
if (self.navigationController.navigationBar.hidden == NO)
{
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
}
----------------下面是2013.12.5的更新--------------
上面的解决办法只对使用了 Autolayout的viewController有用,如果你将要显示的viewController没有使用autolayout,这个办法是不行的,解决办法如下:
在viewcontroller加入下面这个方法:
-(void) hideNavBar {
if (self.navigationController.navigationBar.hidden == NO)
{
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
}
之后,在viewWillAppear中加入如下代码:
[self performSelector:@selector(hideNavBar) withObject:nil afterDelay:0.0];