Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UITableView中移动包含多行的行_Ios_Iphone_Uitableview - Fatal编程技术网

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
行数超过了您可以计数的行数,您可能会遇到用户体验问题。