UITableViewCell avec la hauteur dynamique UIWebView
J'ai un affichage de tableau avec des cellules qui ont une webView en eux, je veux la hauteur de la cellule à la hauteur de la webView.
C'est le code que j'utilise:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("newsCell") as! NewsTableViewCell
cell.webView.loadHTMLString("test<br>test<br>test<br>test<br>test<br>test", baseURL: nil)
cell.webView.delegate = self
var webFrame = cell.webView.frame
var cellFrame = cell.frame
cell.frame = CGRectMake(cellFrame.origin.x, cellFrame.origin.y, cellFrame.width, webFrame.height + 20)
cell.backgroundColor = UIColor.redColor()
return cell
}
func webViewDidFinishLoad(webView: UIWebView) {
println("finished loading")
var frame = webView.frame
frame.size.height = 1
webView.frame = frame
var fittingSize = webView.sizeThatFits(CGSizeZero)
frame.size = fittingSize
webView.frame = frame
var height: CGFloat = frame.height
println(height)
webView.frame = CGRectMake(frame.origin.x, frame.origin.x, frame.size.width, frame.size.height)
newsTable.beginUpdates()
newsTable.endUpdates()
}
Et voilà le résultat: https://postimg.cc/image/8qew1lqjj/
La webView est de la bonne hauteur, mais la cellule n'est pas le cas, Comment puis-je résoudre ce problème?
source d'informationauteur OmerN
Vous devez vous connecter pour publier un commentaire.
TableView redimensionner les cellules de lui-même, vous avez juste besoin de mettre en œuvre
tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
méthode du délégué.Oui, vous ne connaissez pas la hauteur de WebView au départ, mais vous pouvez le calculer, puis de demander à TableView pour recharger la cellule. Quelque chose comme ceci:
C'est un travail pour moi, un Moyen facile de charger Chaîne Html sur WebView avec dynamique.
D'abord prendre textView dans TableViewCell avec défilement désactiver, puis prendre WebView, Appliquer Zéro contrainte sur les 4 Côté avec ContentView. Maintenant donner la même hauteur contrainte pour les deux textview et WebView.Maintenant donner le même texte à la fois vue comme illustré ci-dessous de code.
Pour l'assainissement de l'INTERFACE utilisateur de Masquer textView De XIB ou d'un scénario.
Swift 4
tel que l'ifau de Réponse modifiée pour Swift 4, à l'aide de
UITableView
au lieu deUITableViewController
.Dans le storyboard, prendre un
UITableView
. Ajouter 1 prototype de cellule. Garder le reuseIdentifier de la cellule à "cell
". Faites glisser unwebView
dans la cellule et à l'origine, derrière, en haut et en bas des contraintes à 0. Définir la classe de cellules deTableViewCell
TableViewCell.swift
Connecter webView prise de storyboard:
ViewController.swift
Connecter le tableView prise à la table de montage:
Après le calcul de la hauteur de webview Utilisation DispatchQueue pour le rechargement de la tableViewcell hauteur
DispatchQueue.main.async
.Il évite anormale espaces vides et les bloque lors du rechargement de la webview cadreLa meilleure façon fonctionné pour moi.
Je n'ai plus de solution que vous devriez considérer. Faire une de la hauteur de la contrainte et de la lier à votre
UITableViewCell
classe. Puis de mettre en œuvre la méthode du déléguéfunc webViewDidFinishLoad(_ webView: UIWebView)
et lorsqu'elle est appelée à définir la hauteur de la contrainte égale àwebView.scrollView.contentSize.height
.Mettre en œuvre la UITableview délégué
heightforrowatindexpath pour retourner la webview hauteur du cadre.