Ios 在UITableView中移动包含多行的行
我有一个包含数千行的Ios 在UITableView中移动包含多行的行,ios,iphone,uitableview,Ios,Iphone,Uitableview,我有一个包含数千行的UITableView。以下代码使应用程序缓慢爬行: [tableView moveRowAtIndexPath:fromIndexPath toIndexPath:toIndexPath]; 分析告诉我,UITableView正在调用tableView:estimatedHeightForRowAtIndexPath:和tableView:heightForRowAtIndexPath:for所有行!显然,计算数千个细胞的高度对于一个简单的移动来说太费力了 这是预期的行为
UITableView
。以下代码使应用程序缓慢爬行:
[tableView moveRowAtIndexPath:fromIndexPath toIndexPath:toIndexPath];
分析告诉我,UITableView
正在调用tableView:estimatedHeightForRowAtIndexPath:
和tableView:heightForRowAtIndexPath:
for所有行!显然,计算数千个细胞的高度对于一个简单的移动来说太费力了
这是预期的行为吗?我不明白为什么UITableView
需要所有单元格的高度才能移动两个单元格我能做些什么来避免这种情况吗?
我用一个普通的UITableView
重现了这个问题:tableView:heightforrow索引路径:
在移动两行时,无论发生什么情况,都会为每一行调用
(需要注意的是,
从IndeXPath
和到IndeXPath
是连续的索引路径)但是,如果您正确地实现了估计未来的权重
和高度
,那么即使对所有行调用了这些方法,它们也应该立即返回。因此,问题可能在于您的实现。我建议你继续分析更精细的细节…只是为了修改我之前的评论:你可能偶然发现了一个错误,涉及苹果公司在何时调用estimatedHeightForRow
和heightForRow
之间的关系。我不否认苹果可能在这里搞砸了!但在得出结论之前,我们需要更多地了解这些方法的实施情况。@matt我想我是的estimatedHeightForRow
立即返回heightForRow
使用缓存,但第一次每次调用都需要几毫秒。在任何情况下,为什么需要计算所有单元格的高度?为什么要用beginUpdates
和endUpdates
包装对moveRow…
的调用。这是不必要的。如果您显示的UITableView
行数超过了您可以计数的行数,您可能会遇到用户体验问题。