【问题标题】:How to lock UISearchBar in place to superview如何将 UISearchBar 锁定到位以进行超级视图
【发布时间】:2017-09-22 16:53:26
【问题描述】:

我正在使用UISearchController 和它的UISearchBarUISearchController 与其UITableView 一起放置在我的主视图的子视图中。

我的目标是锁定 UISearchBar 在它的位置,所以当它处于活动状态时,它不会移动。目前正在发生以下情况:

我已经广泛搜索了这个问题并尝试了以下方法:

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

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

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

  4. 使用 UIBarPositioningDelegate 提到的 here 方法,奇怪的是它无法转换为 Swift,因为我无法插入 AnyObject<UIBarPositioning>,因为它在 Objective C 版本中仍然被识别为 override功能

感谢任何建议。

编辑:

这里是搜索项的设置:

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

【问题讨论】:

  • 看看这个链接.. 特别是在最后一个答案stackoverflow.com/questions/31702413/…
  • 感谢您发布此信息。虽然这很适合将 UISearchBar 保持在同一位置,但它仍然会显示动画并隐藏在我的视图中。
  • 您是否在故事板中添加搜索栏?如果是,那么请在您的代码中创建一个搜索栏,然后将其添加到 tableview 标题中。
  • 我不是。一切都以编程方式完成。我已经编辑了上面的问题
  • @daspianist 值得您尝试使用UIViewController,然后在顶部有您的标题视图(带有选项卡选择的那个),然后是您的UISearchBar,最后,有一个嵌入UITableViewController 的容器视图。如果你这样做,我可以保证它不会移动。虽然不确定它有多优雅。 (我的项目中有完全相同类型的 UI)

标签: ios swift uitableview uisearchbar uisearchcontroller


【解决方案1】:

在 Storyboard 中将 TableView 的 Style 属性设置为 Plain,并使用 SearchBar 作为部分标题视图。除了以下代码,我在 Apple 的“使用 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
}

【讨论】:

  • 这似乎是一个很好的执行。但是,当我尝试它时,它只是将 searchBar 放置在视图上方(imgur.com/a/wHf6A
  • 那我不遵循你想要达到的效果。 @daspianist
  • 嘿,马特,我的目标是在用户键入时根本不让 searchBar 从其原始位置移动,如问题正文的第二张图片所示。在这种情况下 1. searchBar 与第一个单元格的部分重叠 2. 它向上碰撞其他视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多