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是使用UIViewController
的extendedLayoutIncludesOpaqueBars
属性。 如果你使用的是不透明的导航栏,只需在控制器中设置为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可以修复显示和崩溃。