UISearchController searchBar在第一次点击时消失

我已经在TableView中实现了一个UISearchController,由导航控制器推送。

首先我的问题是,每当我点击SearchBar时,它就会消失。 当我input一些文字时,它会起作用,但它保持完全空白。 然后我设法使用这个代码半解决问题:

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

因为现在是半工作的,当我点击search栏时,它会空白,但是如果我input一个字符,就会再次出现,然后它就停留在那里,不pipe怎样。 直到我取消search,然后再次点击它,在这种情况下,它空白。 我做了一些testing,并且这个方法(searchForText)在第一次点击时被调用,所以这不是原因。

有谁知道我可以如何解决这个问题,并使第一次点击search栏出现?

编辑:

这是我如何初始化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]; 

尝试检查navigationBar.translucent属性 – 它应该是当UISearchController将呈现searchBar或否则将是UI错误。

从@SiavA更新

更好的解决scheme是使用UIViewControllerextendedLayoutIncludesOpaqueBars属性。 如果你使用的是不透明的导航栏,只需在控制器中设置为true ,然后显示UISearchController (不适用于navigationController )。

例如

 - (void)viewDidLoad { [super viewDidLoad]; self.extendedLayoutIncludesOpaqueBars = !self.navigationController.navigationBar.translucent; } 

UISearchController隐藏导航栏时,这发生在我身上。 设置这个属性解决了它:

UISearchController.hidesNavigationBarDuringPresentation = NO;

把SearchController放在一个UIScrollView中,它会正常工作。 如果您在节标题中使用它或作为单独的视图使用它

如果你在iOS11遇到这个问题(尤其是如果它在iOS11以前工作),我不得不改变我的UISearchController附加到navigationItem而不是tableView。

在我的searchController上设置参数后,我曾经这样做:

 tableView.tableHeaderView = searchController.searchBar 

现在我有这个:

 navigationItem.searchController = searchController 

“半透明”的解决scheme将允许控制器出现,但是当我试图放松到一个特定的赛格,我会崩溃。 将searchController附加到navigationItem可以修复显示和崩溃。