如何清除包含在重复使用的自定义 UITableViewCell 中的 WKWebview?
Posted
技术标签:
【中文标题】如何清除包含在重复使用的自定义 UITableViewCell 中的 WKWebview?【英文标题】:How can I clear a WKWebview that is contained in a custom UITableViewCell that is reused? 【发布时间】:2016-10-27 13:48:24 【问题描述】:我有一个 UITableView 可以将我的自定义 UITableViewCell 出列。 UITableViewCell 包含一个 WKWebView。在 cellForRowAtIndexPath 中,我设置了 WKWebView 应该加载的 url,webview 开始加载页面。问题是单元格的数据有时会显示“旧”数据,而新的 url 仍在加载。
我尝试先加载 about:blank,也尝试了webView.loadhtmlString("", baseURL: nil)
,但没有成功,因为它是异步操作。
这是我的代码片段。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: MyTableViewController.cellIdentifier, for: indexPath) as! MyTableViewCell
cell.url = data[(indexPath as NSIndexPath).row]
return cell
在 MyTableViewCell 中,我立即开始加载 html。 loadHTML(in:,forUrl:) 是一个私有函数,将 url 加载到 webview 中。
var url: String?
didSet
loadHTML(in:webView!, forURL:url)
如果有人知道如何正确执行此操作,我们将不胜感激。我看到的一些建议包括隐藏 webView 直到它完成加载。我实际上希望我的用户看到加载进度。
我认为不让 UITableViewCell 出队不是一个好主意。 (该单元格还包含其他控件。)我现在能想到的最好的方法是删除 WKWebView 并重新添加它。
【问题讨论】:
【参考方案1】:只要不重新加载,用空视图覆盖内容怎么样(我想你可以通过 wk 委托didFinishNavigation
来检查它)
您可以省略加载,调整一下约束。
我知道这很 hacky,但如果你寻找一个快速的'n'dirty 解决方案可能会起作用。
不确定性能有多好,但可以肯定的是它不涉及重新计算约束,这与删除和重新添加 webview 是相反的
【讨论】:
感谢您的回答。这是有趣的部分。例如,当我加载包含视频的页面时。 didFinishNavigation,仅在整个视频加载后发生。在那之前我真的不想显示一个空白屏幕。如果我不隐藏或空白,其他元素会加载,视频只是稍后填充。我还尝试观察 WKWebView.estimatedProgress 并隐藏 webview 直到收到第一个进度,但是在旧数据实际消失的进度状态下并不一致 然后可能会在 - tableView:didEndDisplayingCell:forRowAtIndexPath: 中加载静态空 html 页面或 javascript ?以上是关于如何清除包含在重复使用的自定义 UITableViewCell 中的 WKWebview?的主要内容,如果未能解决你的问题,请参考以下文章
对值可能包含重复项的自定义对象的 NSMutableDictionary 进行排序
如何在 TableView 中添加不同的自定义单元格 [重复]