UISearchController不会为iOS 8 Swift解除搜索栏和重叠

时间:2015-04-23 17:41:02

标签: ios swift uisearchcontroller

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上显示一秒钟。

2 个答案:

答案 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];
}

这似乎可以解决问题。