webView导致tableview滞后

Posted

技术标签:

【中文标题】webView导致tableview滞后【英文标题】:webView causing lag in tableview 【发布时间】:2015-12-10 12:35:10 【问题描述】:

我正在做一个项目。我已经实现了可扩展单元格,我有一些关于单元格的信息,当我单击它时,它会展开并显示描述。 我以UIWebView 加载描述,因为我从JSONhtml 格式获取它。

我遇到的问题是 UITableView 中的滚动滞后,我 99% 确定是 UIWebView 导致问题,因为我有其他表格视图以及不可扩展的单元格,而且他们重新滚动一切顺利。

我想我可以通过不让表格在开始时加载 html 内容来解决问题,只在我选择的每个单元格的 Didselect 方法上加载它。

但是我很难做到这一点。无论如何我只能为 1 个特定单元格加载UIWebView(在这种情况下只有我单击的单元格)。 任何帮助表示赞赏。 如果您认为还有其他方法可以解决此问题,请随时提出建议。

提前致谢

PS:我在youtube 中查看了swift 的可扩展单元格教程,结果大致相同。

【问题讨论】:

是否可以将您的内容加载为属性字符串?因为 WebView 在滚动时总是很慢。另一个想法是,您加载您的内容,从您的内容制作屏幕截图,并使用图像而不是 WebView。 我需要链接是可点击的,文本不应该是可编辑的,你只能查看它。 这仍然可以使用属性字符串:***.com/questions/21629784/… 【参考方案1】:
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
//Background Thread
NSData* data = [NSData dataWithContentsOfURL:@"YOUR URL"];
dispatch_async(dispatch_get_main_queue(), ^(void)
    //Run UI Updates
    [mWebView loadData:data MIMEType: @"text/html" textEncodingName: @"UTF-8" baseURL:nil];
);
);

【讨论】:

1.这不是 Swift,而是它的 ObjC。 2. 请编辑答案,而不是创建新答案。 @derdida 你需要哪个版本的swift?【参考方案2】:

使用 GCD,它将在后台进行 UIWebview 加载过程,并在加载完成时加载 UIWebview

【讨论】:

我使用 GCD ,但这不是造成整个问题的过程,内容加载并停留在 uiwebview 导致滞后。我需要它为空并仅在单击单元格时加载。 在 didSelectRowAtIndexPath 中在单元格子视图中添加 UIWebview 和 loadURLRequest 并显示活动直到完全加载【参考方案3】:

好吧,伙计们 vaibby 是对的。感谢大家的回复。

我使用了 GCD,但在错误的地方调用它。 只是想让您知道问题已解决。 我所做的第一步是缓存 UItableView 的图像。 作为第二步也是非常重要的一步,我将 Async 库实现到我的项目中,并在 cellForRowAtIndexPath 函数中使用它来调用 Async.background 中的 webView(因此它在后台线程中绘制 UIwebView),现在滚动正在工作应该的。

【讨论】:

以上是关于webView导致tableview滞后的主要内容,如果未能解决你的问题,请参考以下文章

Swift,将更多数据加载到表视图中会导致滚动滞后

TableView上的HeaderView放WebView

Tableview 中印地语的滞后问题

Swift Json Tableview 滞后

TableView 滞后太多,占用太多内存 Swift

UICollectionView初始滞后,PagingEnabled = true