UISearchController 搜索栏与 CollectionView 重叠
Posted
技术标签:
【中文标题】UISearchController 搜索栏与 CollectionView 重叠【英文标题】:UISearchController searchbar overlaps CollectionView 【发布时间】:2017-06-13 12:40:00 【问题描述】:以编程方式启动 UISearchController 时,UISearchBar 与下面的 CollectionView 重叠。
我到处搜索,似乎以前没有人遇到过这种问题。
我能做和不能做有一些限制:
不能使用表格视图标题 不能使用collectionview header 必须使用collectionviewcontroller已经尝试过调整滚动视图插入和扩展边缘 - 没有用,因为它是 CollectionViewController
问题是:如何以正确的方式使用 IBAction? 连接放大镜的IBAction代码为:
@IBAction func showSearchBar(_ sender: UIBarButtonItem)
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
present(searchController, animated: true, completion: nil)
【问题讨论】:
我记得 UISearchController 有一个委托方法,类似于 becomeActive。您是否尝试过在该方法中更改 collectionView 的插图? 这看起来一点都不正确...你怎么有两个状态栏?你能创建一个重现这个结果的小项目吗? 这些不是状态栏,而是顶部栏。当 UISearchController 被调用时,如上面的代码,它将标准的 Top Bar 替换为 UISearchBar 接口。一旦 UISearchBar 被 Cancel 按钮关闭,标准的 Top Bar 就回来了。 【参考方案1】:感谢@noir_eagle 的建议,我已经为present(searchController, animated: true, completion: nil)
方法实现了完成块,所以它看起来像这样:
present(searchController, animated: true, completion:
UIView.animate(withDuration: 0.25, animations:
self.collectionView?.contentInset = UIEdgeInsets(top: 64, left: 0, bottom: 0, right: 0)
self.collectionView?.contentOffset = CGPoint(x: 0, y: -64)
)
)
我不得不在这个方法中这样做,因为 UISearchControllerDelegate
方法 didPresentSearchController(_ searchController: UISearchController)
和 willPresentSearchController(_ searchController: UISearchController)
永远不会被调用......不知道为什么。
接下来,不知何故,UISearchControllerDelegate
的方法 didDismissSearchController(_ searchController: UISearchController)
在使用 Cancel 按钮关闭 UISearchBar
后立即被调用,所以我实现了这个:
func didDismissSearchController(_ searchController: UISearchController)
UIView.animate(withDuration: 0.25, animations:
self.collectionView?.contentInset = UIEdgeInsets(top: 64, left: 0, bottom: 0, right: 0)
)
这很好...流畅的动画,直到我意识到属性searchController.hidesNavigationBarDuringPresentation
是true,所以我所要做的就是将它设置为false强>。
就是这样,不需要contentInset
或contentOffset
动画!
最终解决方案如下所示:
@IBAction func showSearchBar(_ sender: UIBarButtonItem)
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
present(searchController, animated: true, completion: nil)
【讨论】:
以上是关于UISearchController 搜索栏与 CollectionView 重叠的主要内容,如果未能解决你的问题,请参考以下文章