本篇讲到SearchBar一些配置中的问题

我使用的是在要添加的页面添加Controller然后新增一个TableViewController配合使用的模式

1
2
3
let sr = SearchResults()
searchController = UISearchController(searchResultsController: sr)
searchController.searchResultsUpdater = sr

可以减少代码的臃肿量,尤其是在代码量很大的Player页面里,但会有很多数据传输的问题,这个先不谈

位置偏移

  1. 如果直接设置navigationBar隐藏,然后把searchBar添加到一个位置,会出现tableVIew留空的状态

image-20200206011006954

这是tableVIew自动处理边距的问题

tableView.contentInsetAdjustmentBehavior设置为never就行

  1. 如果设置一个View然后把bar放进去,不会又偏移,但是拖动列表后会出现偏移,解决方法也是把tableView.contentInsetAdjustmentBehavior设置为never

    但是此方法由于隐藏了navigationBar,导致列表过长时上拉会在状态栏透出来,

    就得使用第三种方法

  2. 使用navigationItem的titleView

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let resultsTableViewController = SearchResults()

    searchController = UISearchController(searchResultsController: resultsTableViewController)
    searchController.delegate = self
    searchController.searchResultsUpdater = resultsTableViewController
    definesPresentationContext = true
    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "不搜了"
    searchController.searchBar.delegate = resultsTableViewController
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.searchBar.placeholder = "搜索想听的音乐"
    searchController.searchBar.sizeToFit()

    navigationItem.titleView = searchController.searchBar

    同时本身要挂上UISearchControllerDelegate,结果控制器要挂上UISearchBarDelegate

    这样就行了