gpt4 book ai didi

ios - 如何修复滚动到 UITableView 的顶部,这样它就不会出现错误?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:07 27 4
gpt4 key购买 nike

应用搜索过滤器后,我们希望 TableView 滚动到结果的顶部。我们有一个随内容滚动的 TableView Header。因此,top 意味着我们希望看到 TableView 标题以及前几个单元格。我发现了以下内容并尝试了一些适用于 iOS 10 和 iOS 11 的解决方案:UITableView - scroll to the top但是,我们不断遇到错误。

例如,我们尝试应用 scrollRectToVisible 解决方案,例如:

self.tableView.scrollRectToVisible(CGRect(x: 0, y: 0, width: 1, height: 1), animated: true)

但是应用了3次滤镜后,TableView Header上方有时会出现如下灰色区域:

gray area

TableView Header 解决方案的 scrollToView Programmatically scroll a UIScrollView to the top of a child UIView (subview) in Swift具有相同的灰色区域效果。

另一种方法也产生了灰色区域:

UIView.animate(withDuration: 0.25) {
self.tableView.setContentOffset(CGPoint.zero, animated: false)
}

因此,我们尝试了 setContentOffset 解决方案,例如:

if #available(iOS 11.0, *) {
tableView.beginUpdates()
tableView.setContentOffset(CGPoint(x: 0, y: -tableView.adjustedContentInset.top), animated: true)
tableView.endUpdates()

} else {
tableView.beginUpdates()
tableView.setContentOffset(CGPoint(x: 0, y: -tableView.contentInset.top), animated: true)
tableView.endUpdates()
}

但是,似乎有一种情况不会将用户一路带到顶部,例如此处:https://youtu.be/OmWCk5PedJE我不是很肯定,但也许这与电池位于顶部下方有关。

需要注意的是,TableView是Grouped样式,这样HeaderView会向上滚动离开。我们使用了一个很大的 estimatedRowHeight(800 的巨大数字)并且 rowHeight 被设置为 UITableViewAutomaticDimension。

Interface Builder 中的文档大纲是:

document outline

有没有一种解决方案可以将一个人带到搜索结果的顶部,而不会产生 TableView 标题 View 上方的灰色区域的副作用,或者如果单元格先滚动到某个点就会失败?谢谢。

最佳答案

修复是有一个明确的 tableView(_:heightForRowAt:)我们还删除了 TableView 的 estimatedRowHeight 和 rowHeight 的分配。

所以我们添加了这段代码:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

return UITableViewAutomaticDimension
}

并使用了来自 another StackOverflow post 的代码滚动到顶部:

    if #available(iOS 11.0, *) {
tableView.beginUpdates()
tableView.setContentOffset(CGPoint(x: 0, y: -tableView.adjustedContentInset.top), animated: true)
tableView.endUpdates()

} else {
tableView.beginUpdates()
tableView.setContentOffset(CGPoint(x: 0, y: -tableView.contentInset.top), animated: true)
tableView.endUpdates()
}

删除这段代码:

    self.tableView.estimatedRowHeight = 800
self.tableView.rowHeight = UITableViewAutomaticDimension

信不信由你,删除 self.tableView.estimatedRowHeight = 800 是让事情正常进行的关键。如果我们将其保留在那里,setContentOffset 似乎不会生效。添加 beginUpdatesendUpdates 也是如此。

关于ios - 如何修复滚动到 UITableView 的顶部,这样它就不会出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49268973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com