如何创建一个动态更改其高度以适合其内容的表格视图单元格?

时间:2016-06-17 13:49:39

标签: ios swift uitableview uiwebview

我正在显示用户在表格视图中写的一些降价。我显示这些降价文本的方法是将降价转换为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。

  • 控制台还会打印Web视图的新帧。我只有3个网页浏览量,但有6个框架:
  

(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)

高度似乎非常正确,而不是默认的表格视图单元格高度。

我知道如果可以的话,我可以解决这个问题:

  • 在加载HTML之前了解Web视图的内容大小,或者;
  • 在所有Web视图完成加载后重新加载表视图。 (因为我可能会有很多网页浏览量,所以我应尽可能少地调用reloadData,否则会非常慢。)

我该怎么做?

这不是How to make UITableViewCell adjust height to fit its content?的重复,因为该问题的表视图是静态的。加载后其内容不会更改。但是我的网页视图会加载HTML。

1 个答案:

答案 0 :(得分:0)

只需在cellForRowAtIndex中计算高度并设置table.rowHeight。看看这个链接可以帮到你

Insert in a tableView set to Autoresize cause a scroll issue

相关问题