如何将 UISearchController 搜索栏设置为不是 tableHeaderView 或 navigationItem.titleview 的视图?

Posted

技术标签:

【中文标题】如何将 UISearchController 搜索栏设置为不是 tableHeaderView 或 navigationItem.titleview 的视图?【英文标题】:How do I set the UISearchController's searchBar to a view that isn't the tableHeaderView or navigationItem.titleview? 【发布时间】:2015-06-10 12:48:10 【问题描述】:

我试图在表格滚动时保持搜索栏处于视图中。目前,我将它作为表头放置在 tableview 中,它应该可以正常工作,但是当你沿着桌子走下去时,搜索栏当然会滚动到屏幕外。我想我可以简单地修改这个代码示例:

How do I use UISearchController in ios 8 where the UISearchBar is in my navigation bar and has scope buttons?

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
tableview.tableHeaderView = searchContoller.searchBar // How to put it elsewhere?
//Alternative that also works
navigationItem.titleView = searchController.searchBar

我们的想法是采取其他观点并做

otherview = searchController.searchBar

例如,一个 UISearchBar 的出口,或一个空白的 UIView,或类似的东西。

但如果我这样做,它不会显示 searchBar。它似乎只能作为表格的标题视图或作为 navigationItem.titleView。

我错过了什么吗?

【问题讨论】:

如果你在tableview上方有一个空白的UIView位置,假设你有一个名为searchContainer的空白UIView的出口,那么你可以通过searchContainer.addSubview(searchController.searchBar)将搜索栏添加到该视图中跨度> 没错!添加并回答,您将获得更多分数。 【参考方案1】:

如果你有一个空白 UIView 放在 tableview 上方。

假设您有一个名为searchContainer 的空白 UIView 的出口。 然后您可以通过添加以下行将UISearchController 的搜索栏添加到该视图

searchContainer.addSubview(searchController.searchBar)

【讨论】:

在视图控制器中添加 searchBar 对我来说效果很好,但是每次我尝试编辑时 searchResultsController 都不会触发,只是第一次。但是,如果我使用 barButtonItem 来启动 searchBar,那么每次都会触发 searchResultsController 和实际搜索。我在这里错过了什么吗? 有时您应该使用definesPresentationContext = trueextendedLayoutIncludesOpaqueBars = true 设置您的viewDidLoad 方法,以防止一些布局错误。 有没有办法在添加为子视图之前/之后设置 searchController.searchBar 的高度和宽度?

以上是关于如何将 UISearchController 搜索栏设置为不是 tableHeaderView 或 navigationItem.titleview 的视图?的主要内容,如果未能解决你的问题,请参考以下文章

聚焦时如何修复 UISearchController 搜索栏调整大小?

如果没有初始搜索栏,如何呈现 UISearchController?

如何使用代码将 UISearchController Searchbar 放到导航栏上

如何向 UISearchController 添加间隙?

无法将 UISearchController 搜索栏添加到导航栏中,并且未调用委托方法

无法在使用 UISearchController 实现的搜索栏中更改 TF 的背景颜色