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

Posted

技术标签:

【中文标题】添加 UISearchController 后 UITableView 可以滚动到顶部太远【英文标题】:UITableView can be scrolled too far top after adding UISearchController 【发布时间】:2018-04-14 08:13:05 【问题描述】:

在我使用下面的代码将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 可以滚动到顶部,这有点奇怪,如下面的屏幕截图所示。

假设表格视图的行为应该像下面的屏幕截图。

非常感谢任何帮助。

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

【问题讨论】:

您需要添加一个与搜索栏高度相等的表格视图标题。 @slickdaddy 我尝试按照您的建议更改表格视图标题,但问题仍然存在。奇怪的是,每次我点击搜索栏并点击取消搜索栏按钮时,问题都会自行修复。 我在 ios11 上遇到过类似的。我将单元格高度的计算移至委托 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath),并在 viewDidLoad 中设置:self.tableView.estimatedRowHeight = 0, self.tableView.estimatedSectionHeaderHeight = 0, self. tableView.estimatedSectionFooterHeight = 0. @Harman 添加 self.tableView.estimatedRowHeight = 150 后问题已解决。感谢您给我的想法! :) 【参考方案1】:

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

self.tableView.estimatedRowHeight = 150

特别感谢@Harman 给了我这个想法。

【讨论】:

以上是关于添加 UISearchController 后 UITableView 可以滚动到顶部太远的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中更改 UISearchController 的位置

iOS UISearchController:等到 UISearchController 在取消搜索后被解除

添加 UISearchController 时导航栏变为白色

UISearchController 在编辑时添加偏移量

如何向 UISearchController 添加间隙?

在 UISearchController 下添加水平滚动过滤器选项