在导航栏中显示搜索栏而不在iOS 11上滚动

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

我将UISearchController附加到iOS 11上的UITableViewController的navigationItem.searchController属性。这很好用:我可以使用漂亮的iOS 11风格搜索栏。

但是,我想在发布时使搜索栏可见。默认情况下,用户必须在表格视图中向上滚动才能看到搜索栏。有谁知道这有可能吗?

enter image description here enter image description here

左:启动后的默认情况。右:搜索栏可见(通过向上滚动)。我希望在发布后可以看到搜索栏,如右侧屏幕截图所示。

我已经发现通过将导航项的属性hidesSearchBarWhenScrolling设置为false可以使搜索栏可见。但是,这会导致搜索栏始终可见 - 即使向下滚动 - 这也不是我想要的。

ios uinavigationitem uisearchcontroller
3个回答
139
投票

以下内容使滚动条首先可见,然后在滚动时允许它隐藏:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if #available(iOS 11.0, *) {
        navigationItem.hidesSearchBarWhenScrolling = false
    }
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if #available(iOS 11.0, *) {
        navigationItem.hidesSearchBarWhenScrolling = true
    }
}

使用isActive没有做我想要的,它使滚动条处于活动状态(显示取消按钮等),当我想要的只是它是可见的。


3
投票

将searchController添加到isActive后,可以将属性true设置为navigationItem

像这样:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    searchController.isActive = true
}

1
投票

以下使搜索栏成为第一响应者:

   override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        DispatchQueue.main.async {
            self.searchController.searchBar.becomeFirstResponder()
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.