【问题标题】:SearchBar in NavigationBar IOS 11导航栏中的搜索栏 IOS 11
【发布时间】:2018-03-12 16:34:16
【问题描述】:

我尝试使用导航栏大标题并将搜索栏添加到导航控制器。搜索栏显示在导航标题下方。它应该被隐藏,直到我向下滑动。我知道默认行为是隐藏的,除非我设置“navigationItem.hidesSearchBarWhenScrolling = false”。即使我添加“navigationItem.hidesSearchBarWhenScrolling = true”,它也不起作用。

我创建了一个新应用来测试这个功能。它嵌入了 ViewController 和 Navigation Controller。以下是我的代码:

class ViewController: UIViewController {

    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationItem.searchController = searchController
        // navigationItem.hidesSearchBarWhenScrolling = true

    }
}

【问题讨论】:

  • 抱歉,有什么问题?
  • 搜索栏应该被隐藏。它只在我向下滑动时显示搜索栏。
  • 问题是 Storyboard 中 TableView 顶部的工具栏。当在 TableView 下移动 Toolbar 时,大标题和隐藏的搜索栏按预期工作。

标签: ios uinavigationcontroller uisearchbar


【解决方案1】:

我也遇到过类似的情况。我已经这样解决了:

1- 删除关于 searchController 的所有内容

2- 将 UISearchBar 控件添加到您的表格中

3- 将此 searchBar 控件连接到 IBOutlet 变量并设置委托

searchBar.delegate = self

4- 仅使用 UISearchBarDelegate(移除 UISearchResultsUpdating)并实现 textDidChange 方法

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    filter...
    reload table...
}

此表头搜索栏适用于 iOS 11 及更早版本

【讨论】:

  • 当我将 searchBar 添加到 tableView 时,它显示在单元格下方而不是上方。关于如何解决它的任何想法?