UITableViewCell高度不会自动调整大小

时间:2019-01-25 08:06:45

标签: ios swift uitableview

我在tablecell中有UIView,在UIView中有WKWebView。 UITableView.automaticDimension正在工作,仅当设置UIView height时,webview中的数据才可见。否则不是。但是我希望UIView的高度根据其中的内容是动态的。

StoryBoardImageLink

这是我的WebView代码:

var webView = WKWebView()
var htmlStrings: String?

@IBOutlet weak var webViewContainer: UIView!

var oiiiiurHtmlString = "<div class=\"html-content pdp-product-highlights\">\n<p><b data-spm-anchor-id=\"a2a0e.pdp.product_detail.i4.a55420b7mofmmi\">SPECIFICATIONS</b></p>\n<ul class=\"\">\n<li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li><li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li><li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li><li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li><li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li><li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li><li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li><li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li><li class=\"\" data-spm-anchor-id=\"a2a0e.pdp.product_detail.i2.a55420b7mofmmi\">Brand: Samsung</li>\n<li class=\"\">Model No: RR19M20A2RH</li>\n<li class=\"\">Color: Scarlet Red</li>\n<li class=\"\">Capacity: 192Ltrs</li>\n\n</ul>\n</div>\n"

var a = "<html><body><font size = 50px face = Avenir"
var b = "</font></body></html>"

override func awakeFromNib() {
    super.awakeFromNib()
    htmlStrings = a + oiiiiurHtmlString + b
    productDetailsWebView()       
}

func productDetailsWebView(){
    let webConfiguration = WKWebViewConfiguration()
    let customFrame = CGRect.init(origin: CGPoint.zero, size: CGSize.init(width: 0.0, height: self.webViewContainer.frame.size.height))
    self.webView = WKWebView (frame: customFrame , configuration: webConfiguration)
    webView.loadHTMLString(htmlStrings!, baseURL: nil)
    webView.translatesAutoresizingMaskIntoConstraints = false
    self.webViewContainer.addSubview(webView)
    webView.topAnchor.constraint(equalTo: webViewContainer.topAnchor).isActive = true
    webView.rightAnchor.constraint(equalTo: webViewContainer.rightAnchor).isActive = true
    webView.leftAnchor.constraint(equalTo: webViewContainer.leftAnchor).isActive = true
    webView.bottomAnchor.constraint(equalTo: webViewContainer.bottomAnchor).isActive = true
    webView.heightAnchor.constraint(equalTo: webViewContainer.heightAnchor).isActive = true
    webView.uiDelegate = self
}

3 个答案:

答案 0 :(得分:1)

您的垂直约束对我来说有点奇怪。您可以通过以下方式设置它们吗? (见附件)。确保有一系列垂直约束将单元的顶部连接到底部,这是决定单元如何调整大小的原因。

如下所示设置约束后,请从其他内容的底部到单元格的底部创建一个新的约束,并将其值设置为greater than or equal to 20(或任何其他值)

最后,请确保在视图控制器中调用以下命令:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 200 //Again you can change this to whatever suits your needs

注意:确保将Web视图的约束绑定到其父视图。并为父视图设置最小高度。

enter image description here

答案 1 :(得分:0)

在返回单元格之前,在“ cellForRowAtIndexPath”方法中添加以下代码。

cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()

答案 2 :(得分:0)

此答案假定以下条件:

  1. 您知道如何将某些数据从单元传递到控制器(也许通过委托)。
  2. 您知道如何正确设置约束,请记住您需要满足视图的所有约束才能伸展单元格。

因此,我在https://stackoverflow.com/a/54276004/3231194上发布了一个答案,说明如何观察WKWebView总内容大小(高度)。检查一个。

这正是您所需要的,然后正确设置WKWebView的约束高度后,通知控制器重新加载tableView,或重新加载保存您的webView的特定行/节。