• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 移动行时如何防止UITableView滚动

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:41:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在开发一个必须支持 000 条记录的 UITableView 实现。我一直在使用 UITable InsertRows、DeleteRows 和 MoveRows 来根据需要随机播放记录。 在性能方面,这一切都在仅使用插入/删除时运行良好。 我发现 MoveRows 具有滚动表格以尝试将任何移动的行保留在表格的可见区域中的不良副作用。 当您有数千条记录时,这可能会导致表扫描,因此需要加载大量单元格。

我尝试了各种技术,例如禁用滚动,以试图防止内容偏移的变化 - 收效甚微。

一种解决方法是放弃 MoveRow,并将其替换为 InsertRow/DeleteRow 对。这确实有效,但代价是动画脱节,更重要的是,会丢失行选择。

任何人都可以在这里推荐一种已知可以达到预期效果的技术吗?

==== 更新====

我提到了“小成功”。如果 ContentOffset{0,0},我确实取得的成功是观察到表未尝试 ContentOffset 重新定位。 所以,我的 hack 是移动到没有动画的 ContentOffset = {0,0},批量更新,然后恢复 ContentOffset。该表似乎在实际 MoveRow 调用内部的某个位置预先计算了它是否会重新定位。所以 - 我可以快速将偏移量移动到零并再次返回,而用户不会看到它。然后表格开始动画。

例如

var contentOffset = _table.ContentOffset;
_table.PerformBatchUpdates(() =>
{
    _table.MovRows(...);
});
_table.SetContentOffset(contentOffset, false);



Best Answer-推荐答案


在 Objective c 中你可以做到这一点...

dispatch_async(dispatch_get_main_queue(), ^{

    [UIView performWithoutAnimation:^{
         //Your operation on tableview goes here...
     });

你可以这样做

 DispatchQueue.async(DispatchQueue.main.async {

        UIView.performWithoutAnimation {
            //Your tableview operation goes here
        }
 })

关于ios - 移动行时如何防止UITableView滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48538155/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap