【发布时间】:2017-09-18 18:57:52
【问题描述】:
我有一个包含大量数据的表格视图。 出于性能原因,它不能一次全部加载。 此外,有时需要随机加载数组的位置,因此增量分页不是一个好的选择。
目前针对这些要求的解决方案是在数据数组上滑动窗口。当用户滚动时,我从一端添加单元格并从另一端删除。我使用滚动位置(通过查看屏幕上的单元格)来确定是否该加载新数据。
通常,当您调用tableView.deleteRows(at:with:) 并从表格的开头删除单元格时,tableView 会调整其contentOffset 属性,因此用户仍会看到与操作前相同的单元格。
但是,当 tableView 在滚动后减速时,它的contentOffset 不会在更新时调整,这会导致一遍又一遍地加载新页面,直到减速完成。然后,在减速后第一次更新时,contentOffset 被 tableView 修复并停止加载。
当使用tableView.insertRows(at:with:)向后滚动并在表的开头添加值时,也会发生同样的情况。
如何让 UITableView 正确调整其 contentOffset?
或者还有其他方法可以克服这个错误 - 保持在数据数组中间加载任意片段并从中滚动的能力?
我做了一个小项目来说明这个错误:
【问题讨论】:
-
你只是想反转滚动吗?这个练习的最终目标是什么?还有什么阻止它一次加载?出列一个单元格应该重用一个已经在内存中的单元格
-
或者您是否试图创建循环的无限滚动?我很困惑你为什么要从顶部/底部添加/删除行
-
我的建议是创建操作队列!! , 新单元格出现时创建操作,单元格离开屏幕时取消操作。
-
我下载了你的示例项目。当我在 iPhone 8 Plus 模拟器上执行它时,它确实在两个方向上平滑滚动。那么,有什么问题呢?
标签: ios uitableview uiscrollview