如何将 UISearchBar 固定在父视图中

3
我正在使用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方法,但奇怪的是无法将其转换为Swift,因为我不能像Objective C版本中那样插入AnyObject<UIBarPositioning>并仍然使其被识别为override函数。

欢迎任何建议。
编辑:
以下是搜索项的设置:
    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    definesPresentationContext = true
    searchTableView.tableHeaderView = searchController.searchBar

查看此链接,特别是最后一个答案:https://dev59.com/A43da4cB1Zd3GeqP1YlO - Gagan_iOS
感谢您发布这个。虽然这对于保持UISearchBar在相同位置很好,但它仍会动画并隐藏到我的视图中。 - daspianist
你是否在Storyboard中添加搜索栏?如果是的话,请在代码中创建一个搜索栏,然后将其添加到表格视图的标题上。 - Gagan_iOS
我不是。一切都是通过编程完成的。我已经编辑了上面的问题。 - daspianist
1
@daspianist 如果你愿意尝试一下,可以创建一个 UIViewController,在顶部放置标题视图(带有选项卡选择的那个)和 UISearchBar,最后再嵌入一个 UITableViewController 的容器视图。如果按照这种方式进行,我可以保证它不会移动。虽然不确定它是否优雅。(我在我的项目中也有完全相同类型的 UI) - TNguyen
显示剩余2条评论
1个回答

1
在Storyboard中将你的TableView的Style属性设置为Plain,并使用SearchBar作为部分标题视图。除了以下代码,我在苹果的“使用UISearchController进行表格搜索”示例中注释掉了tableView.tableHeaderView = searchController.searchBar,这样可以正常工作。
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
}

这看起来是一个不错的执行方案。然而,当我尝试时,它只是将搜索栏固定在视图上方(https://imgur.com/a/wHf6A)。 - daspianist
我不明白你想要实现的效果。@daspianist - Matt H
嘿,Matt,我的目标就是让搜索栏在用户输入时不要从原始位置移动,就像问题描述的第二张图片中所示。在这种情况下,1. 搜索栏与第一个单元格重叠,2. 它会将其他视图往上推。 - daspianist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接