滚动时如何隐藏搜索栏?

问题描述 投票:0回答:3

我的SearchController具有意外的行为,在我的滚动内容之上显示半透明的内容:

Unwanted behaviour

理想情况下,我希望它与内容一起向上滚动,并使导航栏折叠。

有关如何实现此目标的任何提示?

我正在像这样在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)
ios swift uinavigationcontroller uisearchcontroller uinavigationitem
3个回答
0
投票
navigationItem.hidesSearchBarWhenScrolling = true

0
投票

使您的控制器确认到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)
}
}

这可能需要根据您在应用程序中寻找的美观程度进行一些更改。


0
投票

您可以尝试(如果您的应用运行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,则搜索栏将保持可见并固定在导航栏下方。

© www.soinside.com 2019 - 2024. All rights reserved.