UITableView 在滚动期间停止渲染

Posted

技术标签:

【中文标题】UITableView 在滚动期间停止渲染【英文标题】:UITablewView stops renderings during scrolling 【发布时间】:2012-02-17 12:19:21 【问题描述】:

简介

目前我有一个 UITableView,其中填充了自定义单元格,显示当前上传到服务器的文件的上传进度。上传过程只是使用 NSURLConnection 的标准异步方法在后台异步运行的 NSURLConnection 对象。

问题是,在滚动过程中,UITableView 或者我想 UITableview 的 UIScrollView 会阻塞整个主线程,这会导致诸如文件上传过程等重要信息直到UIScrollView 处于静止状态。

研究

现在我确实碰到了我认为与我在这篇文章中的完全相同的问题:类似问题

所以看起来整个主线程都被阻塞了。我还成功地添加了上面帖子中的计时器,即使在滚动过程中也会被调用。但是......不幸的是它并没有真正解决我的情况。

问题仍然是 NSURLConnection 对象被阻塞,这意味着 NSURLConnection 删除方法:didSendBodyData

仍然没有被调用,这是我获得写入服务器的新字节数的地方等等,所以我根本无法接收数据。

有没有办法解决这个问题?我是否必须创建某种自定义 UIScrollView 或类似的东西来绕过限制,比如创建自己的滚动机制?

【问题讨论】:

【参考方案1】:

您是否考虑过将NSURLConnection 代码移动到后台线程上运行?这应该允许它在用户滚动时运行。

您的UITableViewUIScrollView(您提到过),这意味着您可以针对它注册UIScrollViewDelegate。如果你实现了scrollViewDidScroll:,你可以有效地让你的主线程轮询,看看你是否有来自NSURLConnection的结果。

【讨论】:

这听起来是个好主意 :) 绝对是我会研究的!谢谢! :)

以上是关于UITableView 在滚动期间停止渲染的主要内容,如果未能解决你的问题,请参考以下文章

滚动 UITableView 期间计时器将重置并停止运行

滚动/调整 UITableView

快速滚动期间uitableview上的删除按钮

滚动 UITableView 期间未调用 audioPlayerDidFinishPlaying

滚动 UITableView 停止视频播放

如何停止 UITableView 在顶部和底部的滚动?