内嵌在UINavigationController中的UISearchDisplayController使setNavigationBarHidden失效的解决办法

果在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];


你可能感兴趣的:(内嵌在UINavigationController中的UISearchDisplayController使setNavigationBarHidden失效的解决办法)