Ios 向下滚动后再次隐藏SearchController

Ios 向下滚动后再次隐藏SearchController,ios,swift,xcode,tableview,uisearchcontroller,Ios,Swift,Xcode,Tableview,Uisearchcontroller,我让SearchController与我的TableView一起显示,这是启动时与向上滚动时的样子: 这是完美的,因为我希望它隐藏时不使用。然而,在显示它之后,我不能再通过向下滚动来隐藏它。如何获得该功能 import UIKit class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchControllerDelegate, UISearchResultsUpdat

我让SearchController与我的TableView一起显示,这是启动时与向上滚动时的样子:

这是完美的,因为我希望它隐藏时不使用。然而,在显示它之后,我不能再通过向下滚动来隐藏它。如何获得该功能

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchControllerDelegate, UISearchResultsUpdating {
    
    @IBOutlet weak var tableView: UITableView!        
    
    func updateSearchResults(for searchController: UISearchController) {
        let searchBar = searchController.searchBar
        filterContentForSearchText(searchBar.text!)
    }

    var isSearchBarEmpty: Bool {
      return searchController.searchBar.text?.isEmpty ?? true
    }

    func filterContentForSearchText(_ searchText: String) {
      filteredStrings = stockArr.filter { (string: String) -> Bool in
        return string.lowercased().contains(searchText.lowercased())
      }
      tableView.reloadData()
    }
    var filteredStrings: [String] = []

    var searchController : UISearchController!

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        tableView.delegate = self
        

        let searchController = UISearchController(searchResultsController: nil)

        searchController.searchResultsUpdater = self

        searchController.obscuresBackgroundDuringPresentation = false

        searchController.searchBar.placeholder = "Search Candies"

        navigationItem.searchController = searchController
        navigationItem.hidesSearchBarWhenScrolling = false
        
        definesPresentationContext = true
  
    }
}
编辑:

我玩弄添加

tableView.tableHeaderView = searchController.searchBar
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.title = "hello"
但是它看起来不像普通的SearchController(我不明白为什么我不能让它像其他人的一样工作,它应该根据我在这里看到的自动拥有这个功能)


您可能需要检查
UITableView
的滚动方向,并通过code手动禁用
uisearch控制器。以下是方法:

var lastContentOffset: CGFloat = 0 // declare the previous offset for reference

override func viewDidLoad() {
    super.viewDidLoad()
    //...
    searchController = UISearchController(searchResultsController: nil) // remove let
    navigationItem.hidesSearchBarWhenScrolling = true
    //...
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    navigationItem.searchController = lastContentOffset < scrollView.contentOffset.y ? nil : searchController
}
var lastContentOffset:CGFloat=0//声明上一个偏移量以供参考
重写func viewDidLoad(){
super.viewDidLoad()
//...
searchController=UISearchController(searchResultsController:nil)//删除let
navigationItem.HideseArchBarWhenScrolling=true
//...
}
func scrollViewDidScroll(scrollView:UIScrollView){
navigationItem.searchController=lastContentOffset
您可能需要检查
UITableView
的滚动方向,并通过代码手动禁用
UISearchController
。以下是方法:

var lastContentOffset: CGFloat = 0 // declare the previous offset for reference

override func viewDidLoad() {
    super.viewDidLoad()
    //...
    searchController = UISearchController(searchResultsController: nil) // remove let
    navigationItem.hidesSearchBarWhenScrolling = true
    //...
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    navigationItem.searchController = lastContentOffset < scrollView.contentOffset.y ? nil : searchController
}
var lastContentOffset:CGFloat=0//声明上一个偏移量以供参考
重写func viewDidLoad(){
super.viewDidLoad()
//...
searchController=UISearchController(searchResultsController:nil)//删除let
navigationItem.HideseArchBarWhenScrolling=true
//...
}
func scrollViewDidScroll(scrollView:UIScrollView){
navigationItem.searchController=lastContentOffset
不要忘记在此处添加相关代码。看到这篇文章的人应该能够理解上下文。别忘了在这里添加相关代码。看到这篇文章的人应该能够理解上下文。插入了这段代码,但在我再次尝试向下滚动后,它使我的项目崩溃。此功能是否未包含在默认SearchController中?您必须将
SearchController
声明从功能范围移动到视图控制器的范围。是的,我有
var SearchController:UISearchController在viewDidLoad函数之外您正在viewDidLoad中声明一个新的searchController。初始化现有的一个,您的问题就解决了。只需卸下
。检查我的更新,如果它不清楚。哦,它不再崩溃,但不幸的是仍然没有隐藏滚动后的搜索。它只是像往常一样反弹。插入了此代码,但在我再次尝试向下滚动后,它会使我的项目崩溃。此功能是否未包含在默认SearchController中?您必须将
SearchController
声明从功能范围移动到视图控制器的范围。是的,我有
var SearchController:UISearchController在viewDidLoad函数之外您正在viewDidLoad中声明一个新的searchController。初始化现有的一个,您的问题就解决了。只需卸下
。检查我的更新,如果它不清楚。哦,它不再崩溃,但不幸的是仍然没有隐藏滚动后的搜索。它只是像往常一样反弹回来。