我在TableView中实现了一个UISearchController,由一个导航控制器推送.
首先我的问题是每当我点击SearchBar时,它就会消失.当我输入一些文本时,它可以工作,但它保持完全空白.然后我设法使用此代码半解决问题:
- (void)searchForText:(NSString*)searchText { [self.view addSubview:villeSearchController.searchBar]; }
哪个半工作因为现在,当我点击搜索栏时,它会消隐,但是如果我输入一个字符,它会再次出现,然后它就会停留在那里,无论如何.直到我取消搜索,然后再次点击它,在这种情况下它会消隐.
我做了一些测试,这个方法(searchForText)在第一次点击时被调用,所以这不是原因.
编辑:
这是我初始化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时它应该是YES,否则将是UI错误.
来自@SiavA的更新
更好的解决方案是使用UIViewController的extendedLayoutIncludesOpaqueBars属性.如果您使用不透明导航栏,只需将其设置为true,即控制器将显示UISearchController(不适用于navigationController).
例如.
- (void)viewDidLoad { [super viewDidLoad]; self.extendedLayoutIncludesOpaqueBars = !self.navigationController.navigationBar.translucent; }