我有一个嵌套在UITableViewCell中的UIWebView。
如何调整单元格的高度取决于我加载到WebView中的内容(即在完成下载后)......?
我有tableview将heightForRowAtPath设置为UITableViewAutomaticDimension
。
loadContentIntoWebview
由TableView的所有者在其cellForRowAt
委托方法中调用。
我注意到在heightForRowAt
之前调用了cellForRowAt
所以我根据单元格的webview内容大小设置高度的“解决方案”将不起作用。
import UIKit
class MyCell: UITableViewCell, UIWebViewDelegate {
// MARK: - instance variables
@IBOutlet weak var myWebview: UIWebView?
// MARK: - lifecycle methods
override func awakeFromNib() {
super.awakeFromNib()
myWebview?.scrollView.bounces = false;
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
// MARK: - private methods
func loadContentIntoWebview(htmlString: String) {
myWebview?.loadHTMLString(htmlString, baseURL: nil)
}
// MARK: - UIWebViewDelegate methods
func webViewDidFinishLoad(_ webView: UIWebView) {
// dynamically set WebView height
let tempString = myWebview?.stringByEvaluatingJavaScript(from: "document.body.scrollHeight")
var tempHeight: CGFloat = 0.0
if let n = NumberFormatter().number(from: tempString!) {
tempHeight = CGFloat(n)
}
myWebview?.frame.size.height = tempHeight
}
}
答案 0 :(得分:0)
func webViewDidFinishLoad(_ webView: UIWebView) {
if let cell :yourCell = self.yourTblVw.cellForRow(at: yourindexpath) as? yourCell{
// set height of webview as per its content
var frame = cell.webView.frame
frame.size.height = 1
let fittingSize = cell.webView.sizeThatFits(CGSize.zero)
frame.size = fittingSize
cell.heightWebVwMain.constant = fittingSize.height
}
其中heighWebVwMain是您单元格webview高度的约束。所以你必须在cellforRow方法中设置这个常量
答案 1 :(得分:0)
找到解决方案......
webViewDidFinishLoad(_ webView: UIWebView)
中设置约束条件
如初始问题中的高度,但请使用document.body.clientHeight
reloadData()
,而是beginUpdates()
然后endUpdates()
@objc func handleWebviewFinishedLoading() {
self.webview?.beginUpdates()
self.webview?.endUpdates()
}
这似乎重绘了单元格而没有重新加载它们:)