我正在显示用户在表格视图中写的一些降价。我显示这些降价文本的方法是将降价转换为HTML,然后在UIWebview
上显示HTML。因为,我可以使用一些很酷的CSS。
经过一些研究后,我发现我可以将estimatedRowHeight
设置为某些内容并将rowHeight
设置为UITableViewAutomaticDimension
。我还了解了如何设置UIWebView
的框架以使其适合其内容here:
所以我写了这段代码:
var results: [Entry] = []
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return results.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("resultCell")
let webView = cell?.contentView.viewWithTag(1) as! UIWebView
let entry = results[indexPath.row]
webView.loadHTMLString(entry.htmlDescription, baseURL: nil)
webView.delegate = self
return cell!
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
tableView.reloadData()
}
override func viewDidLoad() {
tableView.estimatedRowHeight = 400
tableView.rowHeight = UITableViewAutomaticDimension
}
func webViewDidFinishLoad(webView: UIWebView) {
let height = CGFloat(webView.stringByEvaluatingJavaScriptFromString("document.height")!.toFloat()!)
var frame = webView.frame
frame.size.height = height
webView.frame = frame
webView.scrollView.contentSize = frame.size
webView.scrollView.frame = frame
print(frame)
}
results
数组就是我正在显示的内容。如您所见,我想在每个Web视图中显示结果htmlDescription
。
在webViewDidFinishLoad
委托方法中,我只是做了前面提到的帖子:评估一些JS并更新Web视图的框架。
然而,这种行为远非我的预期。
仅警告一次:检测到约束模糊地建议tableview单元格的内容视图的高度为零的情况。我们正在考虑无意中崩溃并使用标准高度。
我不知道 建议表格视图单元格的高度应为0。
(0.0,0.0,320.0,315.0)
(0.0,0.0,320.0,363.0)
(0.0,0.0,320.0,216.0)
(0.0,0.0,320.0,315.0)
(0.0,0.0,320.0,363.0)
(0.0,0.0,320.0,216.0)
高度似乎非常正确,而不是默认的表格视图单元格高度。
我知道如果可以的话,我可以解决这个问题:
reloadData
,否则会非常慢。)我该怎么做?
这不是How to make UITableViewCell adjust height to fit its content?的重复,因为该问题的表视图是静态的。加载后其内容不会更改。但是我的网页视图会加载HTML。
答案 0 :(得分:0)
只需在cellForRowAtIndex中计算高度并设置table.rowHeight。看看这个链接可以帮到你
Insert in a tableView set to Autoresize cause a scroll issue