Ios 如何隐藏滚动条上的搜索栏?(不带UITableViewController)
我有一个简单的UIViewController,其中包含一个UITableView,我想在滚动UITableView时将搜索栏隐藏在导航栏的内部。我发现Ios 如何隐藏滚动条上的搜索栏?(不带UITableViewController),ios,swift,uitableview,uinavigationbar,uisearchbar,Ios,Swift,Uitableview,Uinavigationbar,Uisearchbar,我有一个简单的UIViewController,其中包含一个UITableView,我想在滚动UITableView时将搜索栏隐藏在导航栏的内部。我发现 navigationItem.HideseArchBarWhenScrolling=true 但它不起作用。有什么方法可以让它在UIViewController上工作吗?我的猜测是,当您第一次进入UIViewController时,UISearchBar默认是隐藏的,考虑到您正在使用UISearchController并使用搜索图标或其他东西
navigationItem.HideseArchBarWhenScrolling=true
但它不起作用。有什么方法可以让它在UIViewController上工作吗?我的猜测是,当您第一次进入
UIViewController
时,UISearchBar
默认是隐藏的,考虑到您正在使用UISearchController
并使用搜索图标或其他东西访问它
对于这种情况,iOS默认情况下不会隐藏UISearchBar
,并且(隐藏/显示它)基于您在UITableView
中的滚动方向,现在如何解决此问题
由于我们无法取消此行为,但当用户执行取消操作时,我们可以稍微改进一些工作,因此我们将UISearchController
设置为nil
以将其从UIViewController
中删除,当用户点击搜索图标时,我们再次给它一个值并显示它
注意:考虑到问题中没有太多上下文或代码,这个答案假设您以这种方式实现它
让我们进入代码
func prepareSearchController() { //function to setup the SearchBar
// Setup the Search Controller
searchController.searchResultsUpdater = self
searchController.searchBar.delegate = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Items"
navigationItem.searchController = searchController
definesPresentationContext = true
}
@objc func openSearch() { // when user tap on the search icon
prepareSearchController()
self.navigationItem.searchController?.isActive = true
}
现在我们按照UISearchBarDelegate
访问取消按钮操作
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { // this function is available only in search bar delegate make sure to conform to it .
self.navigationItem.searchController = nil
}
请尝试这种方法
override func viewWillAppear(_ animated: Bool) {
if #available(iOS 11.0, *) {
navigationItem.hidesSearchBarWhenScrolling = false
}
}
override func viewDidAppear(_ animated: Bool) {
if #available(iOS 11.0, *) {
navigationItem.hidesSearchBarWhenScrolling = true
}
}
SWIFT 4简单实现
将UISearchBarDelegate
委托添加到您的类中
func showSearchBar() {
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = true
navigationItem.hidesSearchBarWhenScrolling = true
//true for hiding, false for keep showing while scrolling
searchController.searchBar.sizeToFit()
searchController.searchBar.returnKeyType = UIReturnKeyType.search
searchController.searchBar.placeholder = "Search here"
navigationItem.searchController = searchController
}
然后在类中添加此函数
func showSearchBar() {
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = true
navigationItem.hidesSearchBarWhenScrolling = true
//true for hiding, false for keep showing while scrolling
searchController.searchBar.sizeToFit()
searchController.searchBar.returnKeyType = UIReturnKeyType.search
searchController.searchBar.placeholder = "Search here"
navigationItem.searchController = searchController
}
然后在你的
viewDidLoad()
中调用函数,滚动方向是什么?你在哪里添加了这个?发生了什么问题是否得到了解决?我喜欢它的工作方式。但将此添加到我的SearchBarDelegate只会创建另一个搜索栏。只是不要从情节提要中添加搜索栏,或从搜索栏中删除第一行。