我有一个包含UITableView的简单UIViewController,我想在滚动UITableView时将搜索栏隐藏在导航栏中。我发现了
navigationItem.hidesSearchBarWhenScrolling = true
但不起作用。有什么办法可以使其在UIViewController上工作?
答案 0 :(得分:0)
我的猜测是,当您首次输入UIViewController
时,默认情况下UISearchBar
是隐藏的,考虑到您正在使用UISearchController
并使用搜索图标或类似图标访问它。
在这种情况下,默认情况下,iOS不会隐藏UISearchBar
,而是根据您在UITableView
中的滚动方向(隐藏/显示)来解决这个问题。
由于无法采取任何措施来取消此行为,但是当用户取消磁带时,我们可以做一些更好的工作,我们将UISearchController
设置为nil
以便将其从{{1 }},当用户点击搜索图标时,我们会再次为其提供一个值并显示。
注意:考虑到问题中没有太多上下文或代码,假设您以这种方式实现此答案。
让我们进入代码。
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
答案 1 :(得分:0)
请尝试这种方法
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
}
}
答案 2 :(得分:0)
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
}
然后在您的viewDidLoad()