添加 UISearchController 后 UITableView 可以滚动到顶部太远

UITableView can be scrolled too far top after adding UISearchController

在我使用下面的代码将 UISearchController 添加到 UITableView 之后。

lazy var searchCardController: SearchCardController = {
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SearchCard") as? SearchCardController
}()!

lazy var searchController: UISearchController = {
    return UISearchController(searchResultsController: searchCardController)
}()

//Core Data
lazy var stack: CoreDataStack = {
    let delegate = UIApplication.shared.delegate as! AppDelegate
    return delegate.stack
}()

lazy var dataSource: CardCategoryDataSource = {
    // Create a fetchrequest
    let fr = NSFetchRequest<NSFetchRequestResult>(entityName: "CD_CardCategory")
    fr.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]

    // Create the FetchedResultsController
    fetchedResultsController = NSFetchedResultsController(fetchRequest: fr, managedObjectContext: stack.context, sectionNameKeyPath: nil, cacheName: nil)

    return CardCategoryDataSource(fetchedResultsController: fetchedResultsController!)
}()


override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = dataSource

    setupSearchBar()
}

func setupSearchBar() {

    searchController.searchBar.delegate = searchCardController
    searchController.searchResultsUpdater = searchCardController
    searchController.dimsBackgroundDuringPresentation = true
    searchController.searchBar.barTintColor = UIColor.black
    searchController.searchBar.tintColor = UIColor.white

    searchCardController.searchController = searchController

    definesPresentationContext = true

    self.tableView.tableHeaderView = searchController.searchBar

}

UITableView 可以滚动到顶部太远,这有点奇怪,如下面的屏幕截图所示。

据推测,table 视图的行为应类似于下面的屏幕截图。

非常感谢任何帮助。

更新: 添加了 GIF 以更好地解释问题。

在我将 estimatedRowHeight 定义为我想要的精确行高后问题得到解决,如下面 viewDidLoad 中所示。

self.tableView.estimatedRowHeight = 150

特别感谢@Harman 给我的想法。