Ich versuche, die Höhe einer Tabellenansichtszelle an die Höhe einer UIWebView
Bildlaufansicht nach dem Zoomen anzupassen. Die UIWebView
ist eine Unteransicht der Tabellenansichtszelle .Aktualisierungsbedingung in UITableViewCell funktioniert nicht richtig mit UIWebView scrollView beim Zoomen
auf
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
DispatchQueue.main.async {
print("\nscrollViewDidEndZooming")
print("webView.scrollView.contentSize.height: \(self.webView.scrollView.contentSize.height)")
print("webViewHeightConstraint: \(self.webViewHeightConstraint.constant)")
let height = self.webView.scrollView.contentSize.height
self.webViewHeightConstraint.constant = height
myDelegate.reloadTableView()
}
}
In geordneten Controller:
func reloadTableView() {
tableView.beginUpdates()
tableView.endUpdates()
}
Es gibt HTML-Inhalte auf dem webview geladen. Das Problem ist, nachdem didEndZooming
aufgerufen und die Höhenbeschränkung aktualisiert wurde, wird es nicht richtig eingestellt. Die Höhenbeschränkung wird bis zur Größe zunehmen. Es scheint mir, dass das Setzen einer Höhenbeschränkung in einer TableView-Zelle irgendwie eine Feedback-Schleife erzeugt.
Wie kann ich das so machen, wie ich es erwarte? (Es sollte die Scrollview, ohne dass der gezoomte Wert der Größe in der Größe unbegrenzt wachsen.)
Update: in
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: WebViewCell.description(), for: indexPath) as! WebViewCell
//The cell delegate implements the didFinishLoad() function
cell.delegate = self
//TODO: I know this is not efficient, will update later.
if let html = viewModel.emailInfo?.htmlContent {
cell.loadHTMLString(html)
}
return cell
}
Die Zelle selbst in einer xib Datei. Ich habe die Ansichten in eine Dummy-Ansicht eingefügt (versuche zu sehen, ob dies mein Problem behoben hat.) Die Web-Ansicht hat Beschränkungen für die oberen, unteren, linken und rechten Kanten. Die Webansicht hat auch eine Höhe Einschränkung. Es ist diese Höhe Einschränkung, webViewHeightConstraint
, dass ich die Höhe der Zelle zu verwenden, versuchen zu bestimmen.
Dies ist die Protokollausgabe nach wenigen Zyklen von ein- und Auszoomen. Dies ist gedruckt, bevor die neue Höhenbeschränkung gesetzt:
scrollViewDidEndZooming webView.scrollView.contentSize.height: 962.0 webViewHeightConstraint: 509,0
scrollViewDidEndZooming webView.scrollView.contentSize.height: 962,0 webViewHeightConstraint: 962,0
scrollViewDidEndZooming webView.scrollView.contentSize.height: 1.531,0 webViewHeightConstraint: 962,0
scrollViewDidEndZooming webView.scrollView.contentSize .height: 1.549,0 webViewHeightConstraint: 1531,0
scrollViewDidEndZooming webView.scrollView.contentSize.height: 2.566,0 webViewHeightConstraint: 1549,0
scrollViewDidEndZooming webView.scrollView.contentSize.height: 2.566,0 webViewHeightConstraint: 2566,0
scrollViewDidEndZooming webView.scrollView.contentSize.height: 4.779,0 webViewHeightConstraint: 2566,0
scrollViewDidEndZooming webView.scrollView.contentSize .height: 4779.0 webViewHeightConstraint: 4779.0
scrollViewDidEndZooming webView.scrollView.contentSi ze.height: 10989.0 webViewHeightConstraint: 4779,0
scrollViewDidEndZooming webView.scrollView.contentSize.height: 10.989,0 webViewHeightConstraint: 10989,0
scrollViewDidEndZooming webView.scrollView.contentSize.height: 25.110,0 webViewHeightConstraint: 10989,0
scrollViewDidEndZooming webView.scrollView. contentSize.Height: 25110.0 webViewHeightConstraint: 25110.0
Sie sollten mehr Code innerhalb der 'tableView (_: cellForRowAt:)' Methode bereitstellen, wie Ihre 'tableViewCell' aussieht und was' webViewHeightConstraint' ist. Es ist einfacher und schneller, Ihnen zu helfen, wenn wir ein Debug Repo haben können. – trungduc
Sie sollten einige weitere Informationen veröffentlichen, um uns zu helfen, z. Welche Einschränkungen sind in der Zelle eingerichtet, ein Beispiel für das, was Sie erwarten und was Sie bekommen, usw. Wenn Sie nach einer "Feedback-Schleife" suchen wollen, dann machen Sie eine Protokollierung in scrollViewDidEndZooming, um zu sehen, ob tatsächlich mehrere ausgeführt werden mal. Ich würde auch vorschlagen, die tatsächliche Höhe, die es einzustellen versucht, zu überprüfen. Schließlich ist UIWebView derzeit veraltet, daher würde ich vorschlagen, in WKWebView zu schauen. –
Danke, ich habe UIWebView aus verschiedenen Gründen gewählt. Aber ich werde noch einmal auf WKWebView schauen. – scord