【发布时间】:2019-04-25 05:30:28
【问题描述】:
我正在构建一个基本的 ViewController,其中包含一个包含多个部分的 CollectionViewController。我想在 NavigationBar 中包含一个 UISearchBar,但似乎 Swift 只允许两种行为选项:最初隐藏搜索栏,然后在用户向下滚动时显示它,或者始终显示搜索栏。
我希望搜索栏能够像在消息应用程序中那样运行,用户无需滚动即可显示,然后在用户向下滚动页面时隐藏。我确信有一个简单的解决方案,但我对 iOS 开发还很陌生,并且无法找到任何以前提出的问题。
搜索栏始终存在的位置示例:
用户必须向下滚动才能显示搜索栏的外观示例:
控制器和搜索栏的初始化:
let searchController = UISearchController(searchResultsController: nil)
let searchBar: UISearchBar = {
let search = UISearchBar()
search.placeholder = "Search"
search.translatesAutoresizingMaskIntoConstraints = false
search.sizeToFit()
search.barStyle = .default
return search
}()
// Truncated...
// Called from viewDidLoad()
func configureSearchBar() {
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search"
searchController.searchBar.translatesAutoresizingMaskIntoConstraints = false
searchController.isActive = true
definesPresentationContext = true
navigationItem.title = "Test Title"
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
}
我知道这段代码不会产生预期的行为,但是我可以做一个简单的修改来让它正常运行吗?
【问题讨论】:
-
"Messages 应用程序,无需用户滚动即可显示,",当您启动消息应用程序时,默认情况下它不会显示搜索字段并且仅在您位于顶部时向上滚动时显示
-
好吧,你为什么不把你的 Custom CollectionView 的第一个单元格设置为搜索栏,这样每当 collectionView 加载时,搜索栏总是会出现在顶部,当您滚动时,它将被隐藏,然后当您再次滚动到顶部时,它将可见。但这似乎不是导航栏的一部分
标签: swift uinavigationbar uisearchbar