首页 > 解决方案 > 滚动时隐藏/取消隐藏 NavigationItem SearchController

问题描述

我已经在这里呆了 2 天了,我无法让我的 UISearchController/NavigationItem 像它应该的那样工作(在启动时隐藏,向上滚动后显示,向下滚动后隐藏)。它是如此简单,显然除了我之外的每个人都可以做到。这是我想要的样子:http ://blog.eppz.eu/swiftui-search-bar-in-the-navigation-bar/

这真的很令人沮丧,我只想知道是否有人可以指导我完成它或将我引导到我可以下载并迁移到我的应用程序的模板文件。

这是我现在的 viewDidLoad,但我也尝试过使用不同的 UISearchController 组合,但它并没有像我想要的那样工作:

  override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        tableView.delegate = self
        
        tableView.tableHeaderView = searchController.searchBar
        searchController.searchResultsUpdater = self
        searchController.hidesNavigationBarDuringPresentation = true
        searchController.obscuresBackgroundDuringPresentation = true
        definesPresentationContext = true
        searchController.searchBar.sizeToFit()
        searchController.searchBar.placeholder = "Search Candies"
        navigationItem.searchController = searchController
        navigationItem.hidesSearchBarWhenScrolling = true
    }

标签: iosswiftxcodeuinavigationcontrolleruisearchcontroller

解决方案


您正在 tableHeaderView 上添加 searchBar。

这对我来说看起来不太好:tableView.tableHeaderView = searchController.searchBar

删除该行并再次测试。

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        tableView.delegate = self
        
        searchController.searchResultsUpdater = self
        searchController.hidesNavigationBarDuringPresentation = true
        searchController.obscuresBackgroundDuringPresentation = true
        definesPresentationContext = true
        searchController.searchBar.placeholder = "Search Candies"
        navigationItem.hidesSearchBarWhenScrolling = true
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if navigationItem.searchController == nil {
        navigationItem.searchController = searchController
    }
}

推荐阅读