根据webview内容更改UITableViewCell高度
我有一个嵌套在UITableViewCell中的UIWebView 如何根据我加载到WebView中的内容(即下载完成后)调整单元格的高度 我使用tableview将RowatPath的高度设置为根据webview内容更改UITableViewCell高度,uitableview,nslayoutconstraint,Uitableview,Nslayoutconstraint,我有一个嵌套在UITableViewCell中的UIWebView 如何根据我加载到WebView中的内容(即下载完成后)调整单元格的高度 我使用tableview将RowatPath的高度设置为UITableViewAutomaticDimension loadContentIntoWebview由TableView的所有者在其cellForRowAt委托方法中调用 我注意到heightForRowAt在cellForRowAt之前被调用,因此我基于单元格的webview内容大小设置高度的“解
UITableViewAutomaticDimension
loadContentIntoWebview
由TableView的所有者在其cellForRowAt
委托方法中调用
我注意到heightForRowAt
在cellForRowAt
之前被调用,因此我基于单元格的webview内容大小设置高度的“解决方案”不起作用
其中heighWebVwMain是单元格网络视图高度的约束。所以你必须在cellforRow中设置这个常数,方法也找到了一个解决方案
- 在
中设置约束的 高度与初始问题相同,但使用webviewdiffinishload(webView:UIWebView)
document.body.clientHeight
- 弹出一个通知,告诉关联的tableview不要
,而是reloadData()
然后beginUpdates()
endUpdates()
这似乎可以在不重新加载的情况下重新绘制单元格:)因此我的WebView位于单元格中。。。所以没有self.tableview。。。我可以引用它,但那似乎很糟糕。我已经找到了一个解决方案,我将在下面作为答案发布。。。不过谢谢你的帖子:)self.tableview将获得手机
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
}
}
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
}
@objc func handleWebviewFinishedLoading() {
self.webview?.beginUpdates()
self.webview?.endUpdates()
}