UISearchController searchBar disappears on first c

2019-06-24 04:17发布

I have implemented a UISearchController in a TableView, pushed by a Navigation Controller.

First my problem was that whenever I click on the SearchBar, it disappears. It works when I enter some text, but it stays completely blank. Then I managed to semi solve the issue using this code:

- (void)searchForText:(NSString*)searchText
{
    [self.view addSubview:villeSearchController.searchBar];
}

Which semi-works because now, when I click on the search bar, it blanks out, but if I enter one character, it appears again, and then it stays there, no matter what. Until I cancel the search, and click on it again, in that case it blanks out. I have made some tests and this method (searchForText) is called on the very first click, so that isn't the reason.

Does anyone know how I can solve this issue and make the searchbar appear from the very first click?

EDIT:

This is how I initialize the SearchController:

villeSearchController = [[UISearchController alloc]   initWithSearchResultsController:nil];
villeSearchController.searchResultsUpdater = self;
villeSearchController.dimsBackgroundDuringPresentation = NO;
villeSearchController.searchBar.delegate = self;
villeTableView.tableHeaderView = villeSearchController.searchBar;
villeSearchController.searchBar.scopeButtonTitles = @[];
self.definesPresentationContext = YES;
[villeSearchController.searchBar sizeToFit];

5条回答
地球回转人心会变
2楼-- · 2019-06-24 04:58

Try to check the navigationBar.translucent property - it should be YES when UISearchController will present the searchBar or else will be UI bugs.

Update from @SiavA

The better solution is use the extendedLayoutIncludesOpaqueBars property of the UIViewController. If you using the opaque navigation bar just set it in the true for controller which will be show UISearchController (not for navigationController).

E.g.

- (void)viewDidLoad {
    [super viewDidLoad];

    self.extendedLayoutIncludesOpaqueBars = !self.navigationController.navigationBar.translucent;
}
查看更多
Fickle 薄情
3楼-- · 2019-06-24 04:58

Place the SearchController inside a UIScrollView and it will work fine. This if you are using it in the section header or as a separate view

查看更多
Summer. ? 凉城
4楼-- · 2019-06-24 05:06

This happened to me when the UISearchController was hiding the navigation bar. Setting this property fixed it:

UISearchController.hidesNavigationBarDuringPresentation = NO;

查看更多
迷人小祖宗
5楼-- · 2019-06-24 05:09

If you run into this problem in iOS11 (and especially if it worked pre iOS11), I had to change my UISearchController to be attached to the navigationItem rather than the tableView.

After setting parameters on my searchController, I used to do this:

tableView.tableHeaderView = searchController.searchBar

Now I have this:

navigationItem.searchController = searchController

The "translucent" fix would allow the controller to appear, but when I would try and unwind to a specific segue, I'd get a crash. Attaching the searchController to the navigationItem fixed both the display and the crash.

查看更多
\"骚年 ilove
6楼-- · 2019-06-24 05:12

Setting isHidden of the navigation bar to false stopped the search bar from disappearing for me.

      self.navigationController?.navigationBar.isHidden = false
查看更多
登录 后发表回答