1. 程式人生 > >內嵌在UINavigationController中的UISearchDisplayController使setNavigationBarHidden失效的解決辦法

內嵌在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];