我的SearchController具有意外的行为,在我的滚动内容之上显示半透明的内容:
理想情况下,我希望它与内容一起向上滚动,并使导航栏折叠。
有关如何实现此目标的任何提示?
我正在像这样在ViewDidLoad中创建SearchController:
let searchResultsController = SearchViewController(nibName: "SearchViewController", bundle: nil)
let searchController = UISearchController(searchResultsController: searchResultsController)
searchController.searchResultsUpdater = searchResultsController
searchController.searchBar.autocapitalizationType = .sentences
searchController.obscuresBackgroundDuringPresentation = true
searchController.searchBar.placeholder = "Search Birds"
searchController.searchBar.delegate = self
navigationItem.searchController = searchController
definesPresentationContext = true
在ViewWillAppear中,我设置了NavigationController:
self.navigationController!.setNavigationBarHidden(false, animated: true)
navigationItem.hidesSearchBarWhenScrolling = true
使您的控制器确认到UIScrollViewDelegate并覆盖以下方法:
扩展ViewController:UIScrollViewDelegate {
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
self.navigationController!.setNavigationBarHidden(true, animated: true)
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
self.navigationController!.setNavigationBarHidden(false, animated: true)
}
}
这可能需要根据您在应用程序中寻找的美观程度进行一些更改。
您可以尝试(如果您的应用运行iOS 11.0及更高版本)
override func viewDidAppear(_ animated: Bool) {
if #available(iOS 11.0, *) {
navigationItem.hidesSearchBarWhenScrolling = true
}
}
override func viewWillAppear(_ animated: Bool) {
if #available(iOS 11.0, *) {
navigationItem.hidesSearchBarWhenScrolling = false
}
}
根据Apple文档:
[如果此属性为true(默认值),则为searchController的搜索当用户在顶视图控制器的滚动条中滚动时,该条将隐藏视图。如果为false,则搜索栏将保持可见并固定在导航栏下方。