首次展示搜索控制器后,iOS 11会隐藏范围栏

时间:2017-11-16 00:22:22

标签: ios uisearchbar ios11 uinavigationitem uisearchcontroller

我正在尝试使用UISearchController在iOS 11中显示搜索栏和范围栏。

以下是我用来设置搜索控制器的代码

let searchController = UISearchController(searchResultsController: nil)
searchController.delegate = self
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false

searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.showsScopeBar = true
searchController.searchBar.scopeButtonTitles = ["1", "2", "3", "4"]
searchController.searchBar.delegate = self
definesPresentationContext = true

我想要一个搜索栏,其范围栏始终可见。 当视图控制器加载时,上面的代码工作正常,它会显示搜索栏和范围栏。

但是,一旦搜索控制器变为活动状态然后被解除,iOS就会在关闭搜索控制器时隐藏范围栏,它只显示搜索栏。

我尝试通过在didDismissSearchController中添加以下代码来解决此问题,但是范围栏和搜索栏相互叠加,而不是搜索栏下方的范围栏(如下图所示) )。将此代码添加到searchBarTextDidBeginEditing(_ searchBar: UISearchBar)searchBarTextDidEndEditing(_ searchBar: UISearchBar)无效。

searchController.searchBar.showsScopeBar = true
searchController.searchBar.sizeToFit()

enter image description here

1 个答案:

答案 0 :(得分:1)

  1. 尝试将此添加到搜索控制器设置中:

    searchController.sizeToFit()
    
  2. 然后添加:

    func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        self.searchBar.sizeToFit()
        return true
    }
    
    func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
        self.searchBar.sizeToFit()
        return true
    }
    
  3. 不要将searchController.searchBar.showsScopeBar = true放在搜索栏功能中。由于某种原因,这会产生问题。