UISearchController不会消除search栏和iOS 8 Swift的重叠

我遇到了UISearchController的问题,如果我在search栏中有文本,并closures它的VC,searchBar将不会消失,只是在屏幕上重叠其他VC中的所有内容。 然后,如果你点击取消button,它会崩溃。

已经尝试了几个解决scheme,但都没有工作。 :/

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 })() 

真的很感谢任何帮助!

更新:所以我有点发现一个不太好的解决scheme是在viewWillDisappear中设置.active = false。 然而,问题是在那之前,searchBar神器会在下一个/上一个VC上显示一秒,然后才会完全消失。

更改以下内容:

 controller.definesPresentationContext = true 

 self.definesPresentationContext = true 

当您在导航堆栈上和离开导航堆栈时,将该视图控制器推入并popup时,该设置还会保留search栏的状态。

你可以阅读关于UIViewController的Apple文档上的definesPresentationContext设置。

如果你能够使用self.definesPresentationContext = true,那么这可能是一个更好的方法。 在我的configuration中,我通过将definitionsPresentationContext设置为false来修复UISearchController的另一个bug。

所以,我转而打电话

 - (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]; } 

而这似乎是伎俩。