I' M具有与所述UISearchController问题,即,如果我有在搜索栏文本和关闭该VC它' S于,搜索栏赢得'吨走开,只是保留在屏幕上在其他重叠一切风险投资。如果你点击取消按钮就会崩溃。
在SO上尝试了一些解决方案,但没有一个有效。 :/
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.hidesNavigationBarDuringPresentation = false
controller.searchBar.sizeToFit()
controller.searchBar.searchBarStyle = UISearchBarStyle.Minimal
controller.searchBar.barTintColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1)
controller.searchBar.tintColor = UIColor.blackColor()
controller.definesPresentationContext = true
controller.edgesForExtendedLayout = UIRectEdge.None
self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0)
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
真的很感激任何帮助!
更新:所以我找到了一个不那么好的解决方案,即在viewWillDisappear中设置.active = false。但问题是,在完全消失之前,searchBar工件将在下一个/上一个VC上显示一秒钟。
答案 0 :(得分:18)
更改以下内容:
controller.definesPresentationContext = true
到
self.definesPresentationContext = true
当您在导航堆栈上打开和弹出视图控制器时,该设置还会保留搜索栏的状态。
您可以在Apple's Documentation on UIViewController上了解definesPresentationContext
设置。
答案 1 :(得分:0)
如果你能够使用self.definesPresentationContext = true,那么这可能是一种更好的方法。在我的配置中,我通过将definitionsPresentationContext设置为false来修复UISearchController的另一个错误。
所以我转而致电
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.searchController setActive:FALSE];
}
为:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[super prepareForSegue:segue sender:sender];
[self.searchController setActive:FALSE];
}
这似乎可以解决问题。