iOS 8 上 UISearchBar 顶部的 header 部分。适用于 iOS 9

Section header on top of UISearchBar on iOS 8. Works on iOS 9

使用 UISearchController 向 UITableView 添加过滤。 header 部分与 iOS 上的搜索栏重叠 8 使用 Xcode 7。这在 iOS 中看起来不错 9. 我可以采取什么解决方法 iOS 8 看起来像 iOS 9 版本?

override func viewDidLoad() {
    super.viewDidLoad()
    self.searchController.searchResultsUpdater = self
    self.searchController.hidesNavigationBarDuringPresentation = false
    self.searchController.dimsBackgroundDuringPresentation = false
    self.tableView.tableHeaderView = searchController.searchBar
    self.definesPresentationContext = true
    self.searchController.searchBar.sizeToFit()

    tableView.sectionIndexBackgroundColor = UIColor.clearColor()
}

更改为:

    self.searchController.searchResultsUpdater = self
    self.searchController.hidesNavigationBarDuringPresentation = false
    self.searchController.dimsBackgroundDuringPresentation = false
    self.searchController.definesPresentationContext = true
    self.searchController.searchBar.sizeToFit()
    self.navigationItem.titleView = self.searchController.searchBar;
    tableView.sectionIndexBackgroundColor = UIColor.clearColor()

所以在 searchController 上设置 definesPresentationContext,而不是视图控制器。

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 44)];
[self.tableView.tableHeaderView addSubview:self.searchController.searchBar];

创建一个新的 UIView 并将 searchBar 添加为子视图,然后将 tableView 的 header 视图设置为新创建的视图将解决问题。