【发布时间】:2022-11-01 11:01:23
【问题描述】:
我有一个 UITableViewController,它使用 FireStore 数据库中的数据加载单元格。该表有一个 SearchController 和一个 SearchBar,它始终处于活动状态。这是因为用户可以通过使用在 SearchBar 中添加字符串的按钮将过滤器应用于 UITableViewController。
一切都很好,但问题是由于 SearchController 始终处于活动状态,它覆盖了导航栏,即“过滤器”按钮所在的位置。由于我不需要用户自己在搜索栏中输入内容(这是通过过滤器按钮完成的),所以我想将搜索控制器隐藏在某个地方,同时保持它处于活动状态。
这是代码的样子:
override func viewDidLoad()
{
super.viewDidLoad()
tableView.register(EncontradoCell.self, forCellReuseIdentifier: cellId)
searchController.delegate = self
searchController.searchBar.delegate = self
initSearchController()
loadData()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Filtrar", style: .done, target: self, action: #selector (showFilters))
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.isActive = true
}
let searchController = UISearchController()
let searchBar = UISearchBar()
func initSearchController() {
searchController.loadViewIfNeeded()
searchController.searchResultsUpdater = self
navigationItem.searchController = searchController
searchController.definesPresentationContext = true
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.enablesReturnKeyAutomatically = false
searchController.searchBar.returnKeyType = UIReturnKeyType.done
navigationItem.hidesSearchBarWhenScrolling = false
searchController.searchBar.becomeFirstResponder()
}
这是 searchcontroller 不活动时的样子:
当 SearchController 处于活动状态时,过滤器按钮会被覆盖:
你能告诉我一种方法来隐藏 SearchController,或者将它重新定位到它不可见的地方,同时保持它处于活动状态吗?也许在底部而不是顶部。
非常感谢
我阅读了有关向 searchController 添加约束或将搜索栏移动到子视图的信息,但由于我是 Swift 新手,我发现这很难实现。
【问题讨论】:
标签: swift xcode uitableview uisearchbar uisearchcontroller