2017-08-11 124 views
0

我有一個表格視圖,其中每個單元格包含一個UIWebView,並且Web視圖的高度表示單元格的高度。表格視圖使用UITableViewAutomaticDimension如何在UIWebView完成加載時強制重新佈局UITableViewCell?

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>a{text-decoration: none; color: #d64a32;}img{max-width:100%; height: auto; margin: 12px 0px;}iframe{max-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

您應該創建一個委託來調用表視圖的控制器。您應該將此代理人設置爲self,cellForRowAt並重新加載代表函數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) 
    } 
} 
+0

如果你通過與indexPath新heigth更好 –