【问题标题】:Hide/Unhide NavigationItem SearchController when scrolling滚动时隐藏/取消隐藏 NavigationItem SearchController
【发布时间】:2020-11-11 03:05:24
【问题描述】:

我已经在这里工作了 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
    }

【问题讨论】:

    标签: ios swift xcode uinavigationcontroller uisearchcontroller


    【解决方案1】:

    您正在 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
        }
    }
    

    【讨论】:

    • 该行是在启动时隐藏 navigationItem.searchBar 的原因。
    • 啊,明白了!如果您希望它在启动时最初隐藏,而不是在 viewDidLoad 中设置 searchController。在 viewDidLayoutSubviews 中设置 searchController。我将编辑我的答案。
    • 哦,酷!我更喜欢这个选项。对我来说,在初始滚动之后它仍然没有隐藏,你知道这是为什么吗?
    猜你喜欢
    • 2016-09-20
    • 2017-12-14
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多