UISearchController黑屏

时间:2017-06-18 13:29:58

标签: ios swift xcode uisearchbar uisearchcontroller

我已经看过这个问题的其他答案,但他们没有解决我的问题。

这是我的故事板设置:

在我的UITableViewController中,如果我设置self.definesPresentationContext = true,则搜索栏将显示在每个选项卡上。如果不这样做,那么在点击搜索然后切换到另一个标签并切换回来之后,该表将变为黑色。

解决方法1:解除searchController或在viewWillDisappear中将isActive设置为false。

问题:每次来回切换时,搜索栏都会从顶部向下推:

解决方法2:设置searchController.searchBar.isHidden = true

问题:在我使用UISearchController的其他标签中,由于另一个搜索栏已经存在(但隐藏),因此无法显示范围:  Attempt to present <UISearchController: 0x7ff81ac0aa30> on <xxx.ViewController: 0x7ff81ac0a6f0> which is already presenting (null)

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并得到修复,正确处理了definesPresentationContext,因此我只需在viewDidAppear中将此属性定义为true,并在false中将其设置为viewWillDisappear }

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if(self.searchController == nil)
        {
            self.setupSearchBar()
        }else{
            self.definesPresentationContext = true
        }
    }

override func viewWillDisappear(_ animated: Bool) {
    self.searchController!.isActive = false
    self.searchController!.searchBar.removeFromSuperview()
    self.definesPresentationContext = false
    if(self.showingSearchBar)
    {
        self.rigthNavBarButtonAction()
    }
    super.viewWillDisappear(animated)
}

我希望这有助于你

答案 1 :(得分:0)

使用您的解决方法1,在self.searchController!.isActive = true中设置viewDidAppear非常有用。您还需要恢复搜索栏文本。