UISearchController 不会关闭搜索栏和重叠 iOS 8 Swift

UISearchController won't dismiss searchbar and overlap for iOS 8 Swift

我在使用 UISearchController 时遇到问题,如果我在搜索栏中有文本并关闭其中的 VC,搜索栏将不会消失,只会保留在屏幕上,与其他 [= 中的所有内容重叠23=]秒。然后,如果您点击取消按钮,它就会崩溃。

已经在 SO 上尝试了一些解决方案,但 none 有效。 :/

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 工件会在 next/previous VC 上显示一秒钟,然后才会完全消失。

更改以下内容:

controller.definesPresentationContext = true

self.definesPresentationContext = true

当您将视图控制器推入和弹出导航堆栈时,该设置还会保留搜索栏的状态。

您可以在 Apple's Documentation on UIViewController 上阅读有关 definesPresentationContext 设置的信息。

如果您能够使用 self.definesPresentationContext = true 那么这可能是更好的方法。在我的配置中,我通过将 definesPresentationContext 设置为 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];
}

这似乎可以解决问题。