我正在开发一个必须支持000条记录的UITableView实现。我一直在利用UITable InsertRows,DeleteRows和MoveRows来根据需要随机播放记录。 在性能方面,当仅使用插入/删除时,这一切都很好。 我发现MoveRows具有滚动表的不良副作用,试图将任何移动的行保留在表的可见区域中。 当你有数千条记录时,这可能导致表扫描大量单元格,从而需要加载。
我尝试过各种技巧,例如禁用滚动,试图阻止内容偏移的变化 - 但收效甚微。
一种解决方法是放弃MoveRow,并用InsertRow / DeleteRow对替换它。这确实有效,但是以脱节动画为代价,更重要的是失去行选择。
有人可以推荐一种已知具有所需效果的技术吗?
====更新====
我提到了一点点成功'。我所取得的成功是观察到ContentOffset
ContentOffset
为{0,0}
时表格未尝试重新定位ContentOffset = {0,0}
。
所以,我的黑客是移动到ContentOffset
没有动画,批量更新,然后恢复MoveRow
。看来该表预先计算它是否会重新定位,在实际var contentOffset = _table.ContentOffset;
_table.PerformBatchUpdates(() =>
{
_table.MovRows(...);
});
_table.SetContentOffset(contentOffset, false);
调用内的某处。所以 - 我可以快速将偏移移动到零并再次返回,而不会让用户看到它。然后该表开始动画。
e.g。
AVPlayerViewController
答案 0 :(得分:0)
在Objective c中你可以这样做......
dispatch_async(dispatch_get_main_queue(), ^{
[UIView performWithoutAnimation:^{
//Your operation on tableview goes here...
});
在swift中你可以这样做
DispatchQueue.async(DispatchQueue.main.async {
UIView.performWithoutAnimation {
//Your tableview operation goes here
}
})