Ale*_*rio 6 video webview uitableview ios swift
我已经尝试在这里找到类似的问题而没有成功.
我有一个UITableView与各种内容和单元格.特别是,它可以显示带有WKWebView的自定义UITableViewCell.有时这个webview有一个自动播放视频,当我在willDisplayCell上配置单元格时启动.因为这个自动播放功能,当我向上/向下滚动时,单元格不会调用委托方法didEndDisplayingCell,并且视频在后台保持活动状态.用户需要关闭viewController或整个App.
我尝试使用webview将所有出列单元格保存在列表中,并在scrollViewDidEndDecelerating上手动将已保存单元格的webview内容设置为html""使用:
cell.webView?.loadHTMLString("", baseURL: nil)
Run Code Online (Sandbox Code Playgroud)
通过这种方式,webview正确停止在后台播放视频,但问题是即使使用这种方法,单元格也没有排队,并且没有调用didEndDisplayingCell:所以当我再次滚动到那个单元格时,我无法重做正确用于重新加载webview的配置.
你有一些提示或技巧吗?
我用一个解决方法解决了。基本上,由于某种奇怪的原因,单元格不会被回收,关于 webView 在这种情况下如何处理视频。因此,我将所有这些单元格保存为 a 中的实例属性,Set并scrollViewDidScroll(_:)检查单元格是否仍然可见。如果它不可见,我会手动从其超级视图中删除 webView。
var advTableViewCells = Set<AdvertisingTableViewCell>() // here I save the cell retrieved in `tableView(_:cellForRowAt:)`
func scrollViewDidScroll(_ scrollView: UIScrollView) {
var cellsToRemove = Set<AdvertisingTableViewCell>() // save the cell to remove in a temporary set, to avoid removing element in a forEach
advTableViewCells.forEach { cell in
if !tableView.visibleCells.contains(cell) {
cell.webView?.stopLoading()
cell.webView?.removeFromSuperview()
cell.webView = nil
cellsToRemove.insert(cell)
}
}
cellsToRemove.forEach { cell in
self.advTableViewCells.remove(cell)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |