Высота UITableViewCell автоматически не изменяется - PullRequest
0 голосов
/ 25 января 2019

У меня есть UIView внутри tablecell, а внутри UIView у меня есть WKWebView. UITableView.automaticDimension работает, и данные внутри веб-просмотра видны только при установленной высоте UIView. в противном случае это не так. Но я хочу, чтобы высота 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 голосов
/ 25 января 2019

Ваши вертикальные ограничения кажутся мне немного странными. Вы можете установить их следующим образом? (Смотри приложение). Убедитесь, что есть заданный поток вертикальных ограничений, соединяющих верх ячейки с низом - это то, что диктует, как ячейка будет изменять размер.

После того, как вы установили свои ограничения, как показано ниже, создайте новое ограничение от нижней части другого содержимого до нижней части ячейки и установите его значение на greater than or equal to 20 (или любое другое значение)

Наконец, в вашем контроллере представления обязательно вызовите следующее:

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

Примечание. Убедитесь, что вы связываете ограничения веб-представления с его родительским представлением. И установите минимальную высоту для родительского вида.

enter image description here

0 голосов
/ 25 января 2019

Этот ответ предполагает следующее:

  1. Вы знаете, как передать некоторые данные из ячейки в ваш контроллер (возможно, через делегата).
  2. Вы знаете, как правильно установить ограничения, помните, что вам нужно удовлетворить все ограничения вашего представления, чтобы растянуть ячейку.

Итак, я разместил ответ здесь https://stackoverflow.com/a/54276004/3231194 о том, как наблюдать общий размер содержимого (высота) вашего WKWebView.Проверьте это.

Это именно то, что вам нужно, и затем, после правильной установки высоты ограничения вашего WKWebView, сообщите контроллеру, чтобы перезагрузить ваш tableView, или перезагрузите такую ​​конкретную строку / секцию, которая содержит ваш webView..

0 голосов
/ 25 января 2019

добавить следующий код в метод "cellForRowAtIndexPath" перед возвращаемой ячейкой.

cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...