我有一个UITableViewController,在导航栏中有一个UISearchController。
当我点击搜索时,向下拉一次然后按“取消”,我看到一个奇怪的UI行为。
我找不到发生这种情况的任何特殊原因。不会每次都复制此问题。如上面的GIF所示,导航栏上有一些按钮时,这种情况会更频繁发生。
当我回到第一个视图控制器(它没有任何导航栏按钮)并重复相同的步骤时,在极少数情况下会重现该问题。
仅当您下拉具有搜索控制器的ViewController时,才会发生此问题。如果您正在使用结果控制器并下拉结果控制器,则不会重现此问题。
以下是示例应用程序中使用的代码。
popleft
我尝试在UISearchControllerDelegate方法perfplot
和import UIKit
class SearchViewController: UITableViewController {
lazy var resultsController = ResultsVC()
lazy var searchController = UISearchController(searchResultsController: resultsController)
override func viewDidLoad() {
super.viewDidLoad()
configureSearchController()
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.title = "Search VC"
}
func configureSearchController() {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = true
searchController.obscuresBackgroundDuringPresentation = false
searchController.hidesnavigationBarDuringPresentation = true
searchController.searchResultsUpdater = resultsController
}
override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath,animated: true)
navigationController?.pushViewController(SearchViewController(),animated: true)
}
override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return 50
}
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "Searchable cell"
return cell
}
}
class ResultsVC: UITableViewController {
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "Result cell"
return cell
}
}
extension ResultsVC: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
print(searchController.searchBar.text)
}
}
中使用tableView.setContentOffet
来更改tableView的内容偏移量,但是y位置因每个设备而异,并且不能通用。
PS:在大多数模拟器中不会发生此问题。因此,请在您的手机中尝试相同的代码。