Prevent a UISearchDisplayController from hiding the navigation bar

后端 未结 15 1636
南方客
南方客 2020-11-27 11:59

Whenever a user begins editing a UISearchDisplayController\'s search bar, the search controller becomes active and hides the view\'s navigation bar while presen

15条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-27 12:07

    I just debugged a bit into UISearchDisplayController and found that it's calling a private method on UINavigationController to hide the navigation bar. This happens in -setActive:animated:. If you subclass UISearchDisplayController and overwrite this method with the following code you can prevent the navigationBar from being hidden by faking it to be already hidden.

    - (void)setActive:(BOOL)visible animated:(BOOL)animated;
    {
        if(self.active == visible) return;
        [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO];
        [super setActive:visible animated:animated];
        [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO];
        if (visible) {
            [self.searchBar becomeFirstResponder];
        } else {
            [self.searchBar resignFirstResponder];
        }   
    }
    

    Let me know if this works for you. I also hope this won't break in future iOS versions... Tested on iOS 4.0 only.

提交回复
热议问题