我让用户重新排序tableView
中的行。由于此事件会影响内容 - 应更新单元格中的某些数值 - 在所有其他行中,我在reloadData
中调用moveRowAtIndexPath
。然后发生奇怪的效果。
即。当触摸拖动器时,细胞似乎重叠,并且一些细胞开始上下移动。重要的是要知道,细胞高度是变化的。
奇怪的是,如果我从reloadData
删除moveRowAtIndexPath
,那么所有这些现象都会消失。只有内容无效。
那么重新排序后我应该如何重新加载数据?
更新:我在viewDidLayoutSubviews
中重新配置单元格而不是reloadData
的{{1}}调用结束时所执行的操作。它的工作效果比我预期的要高90%,但是有时行仍然有点高。
moveRowAtIndexPath
答案 0 :(得分:3)
我在这里找到答案:https://stackoverflow.com/a/4692563/239219
/templates/fields/%7B%7Belem.template_name%7D%7D.html 404 (Not Found)
此代码强制UITableView仅重新加载单元格大小,而不是单元格内容。
答案 1 :(得分:2)
重新订购后,您不应致电reloadData
。
您必须对数据进行相同的更改,就像在屏幕上进行的更改一样。
例如:如果将单元格nr 2移动到位置6,则必须删除填充单元格nr.2的对象并在位置6处再次插入。
您没有提供足够的详细信息,但通常您会将数据保存在一个对象数组中。您必须对此数组进行更改,因此您的支持数据源有效。
这是Apple的详细信息link。
我刚刚在发布答案后阅读了更新内容。看来你真的需要reloadData
。在这种情况下,我建议在主线程上使用dispatch_async块稍微延迟后重新加载。在0.1之后说。
答案 2 :(得分:0)
我还不能评论pteofil的答案,但他是对的:如果你在表格中有一组编号的行,并且你移动了一个调用moveRow(...),你的动画移动将被tableView.reloadData()取消。
因此我延迟了数据重新加载(根据更新的数据源重新编号所有可见的单元格(当你移动东西时不要忘记这样做!))几百毫秒,它现在完美地运行并且看起来也很棒。