如何将UISearchBar锁定到superview

时间:2017-09-22 16:53:26

标签: ios swift uitableview uisearchbar uisearchcontroller

我在其UISearchController旁边使用UISearchBar。其UISearchController旁边的UITableView位于主视图的子视图中。

我的目标是锁定 UISearchBar,因此当它处于活动状态时,它不会移动。现在发生以下情况:

enter image description here enter image description here

我已经广泛搜索过这个问题并尝试了以下内容,例如:

  1. self.searchController.hidesNavigationBarDuringPresentation = false,它突然将搜索栏移动到屏幕中间。

  2. definesPresentationContext = true,不会改变行为

  3. self.extendedLayoutIncludesOpaqueBars = true,不会改变行为

  4. 使用提到的UIBarPositioningDelegate方法here,奇怪地无法将其转换为Swift,因为我无法在Objective C版本中插入AnyObject<UIBarPositioning>并仍然拥有它被识别为override函数

  5. 任何建议表示赞赏。

    编辑:

    以下是搜索项目的设置:

        searchController.searchResultsUpdater = self
        searchController.dimsBackgroundDuringPresentation = false
        definesPresentationContext = true
        searchTableView.tableHeaderView = searchController.searchBar
    

1 个答案:

答案 0 :(得分:1)

在Storyboard中将TableView的Style属性设置为Plain,并使用SearchBar作为节标题视图。除了以下代码之外,我在Apple&#34;表搜索中使用UISearchController评论了tableView.tableHeaderView = searchController.searchBar&#34;例子,它运作良好。

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return searchController.searchBar.frame.size.height
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return searchController.searchBar
}