UIWebView 完成加载后,如何强制重新布局 UITableViewCell?
Posted
技术标签:
【中文标题】UIWebView 完成加载后,如何强制重新布局 UITableViewCell?【英文标题】:How can I force re-layout of UITableViewCell when UIWebView finished loading? 【发布时间】:2017-08-11 19:32:41 【问题描述】:我有一个表格视图,其中每个单元格都包含一个UIWebView
,并且网络视图的高度决定了单元格的高度。表格视图使用UITableViewAutomaticDimension
。
class TitleTableViewCell: UITableViewCell
@IBOutlet weak var webViewHeight: NSLayoutConstraint!
@IBOutlet weak var webView: UIWebView!
override func awakeFromNib()
super.awakeFromNib()
webView.scrollView.isScrollEnabled = false
webView.delegate = self
func configure(content: String?)
if let contenthtml = content
let html = ("<body style=\"font-family: '-apple-system'; font-size: 16; font-weight: bold; line-height: 135%; overflow-wrap: break-word\"><style>atext-decoration: none; color: #d64a32;imgmax-width:100%; height: auto; margin: 12px 0px;iframemax-width:100%; height: auto;</style><p style=\" text-align: left\">\(contentHTML)</p></body>")
webView.loadHTMLString(html, baseURL: nil)
extension TitleTableViewCell: UIWebViewDelegate
func webViewDidFinishLoad(_ webView: UIWebView)
webViewHeight.constant = webView.scrollView.contentSize.height
layoutIfNeeded()
当我推动这个屏幕时,单元格的高度是我在estimatedRowHeight
中定义的高度,但直到我再次弹出并推动屏幕时它才会扩展到全高。
webview完成加载后,如何强制扩展单元格?
【问题讨论】:
【参考方案1】:您应该创建一个调用表视图控制器的委托。您应该在cellForRowAt
中将此委托设置为self
,并为委托函数cellWebViewDidFinishLoad
中引用的索引路径重新加载单元格。
Delegates.swift
protocol TitleCellDelegate: class
func cellWebViewDidFinishLoad(_ indexPath: IndexPath)
TitleTableViewCell.swift
class TitleTableViewCell: UITableViewCell
weak var delegate: TitleCellDelegate?
fileprivate var indexPath: IndexPath!
func configure(content: String?, indexPath: IndexPath)
[...]
self.indexPath = indexPath
extension TitleTableViewCell: UIWebViewDelegate
func webViewDidFinishLoad(_ webView: UIWebView)
webViewHeight.constant = webView.scrollView.contentSize.height
layoutIfNeeded()
delegate?.cellWebViewDidFinishLoad(indexPath)
【讨论】:
如果你用 indexPath 传递新的高度会更好以上是关于UIWebView 完成加载后,如何强制重新布局 UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章
如何调整 UIImageView 的大小并强制重新布局父 UITableViewCell