Comment faire pour déterminer UIWebView hauteur en fonction du contenu, au sein d'une hauteur variable UITableView?
Je suis en train de créer un UITableView
avec la variable de la hauteur des lignes, comme expliqué dans la réponse à cette question
Mon problème est que chaque cellule contient un UIWebView
différentes (de manière statique chargé) contenu je ne peux pas comprendre comment calculer la bonne hauteur en fonction du contenu. Est-il un moyen de faire cela? J'ai essayé des choses comme ceci:
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
WebViewCell *cell = (WebViewCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];
[cell setNeedsLayout];
[cell layoutIfNeeded];
return cell.bounds.size.height;
}
Les cellules elles-mêmes sont chargés à partir d'une plume, qui est simplement un UITableViewCell
contenant un UIWebView
. (Il serait aussi bien si les cellules réglé eux-mêmes la plus grande du contenu html, bien que variable de la hauteur serait plus sympa).
- Avez-vous jamais trouver comment faire cela? Les réponses ci-dessous semblent obtenir de vous la hauteur, mais ce n'est qu'après que vous en avez besoin. Comment pouvez-vous calculer la hauteur pour heightForRowAtIndexPath est que vous devez compter sur une fonction de rappel (webview délégué) appel en webViewDidFinishLoad?
- Salut alors finalement comment u déterminer la hauteur de la webview j'ai aussi eu le même problème...
- Quelqu'un a une solution???? Encore ne peux pas comprendre cela..
Vous devez vous connecter pour publier un commentaire.
Ce code est probablement trop lent pour la table de l'utilisation de vue, mais en fait le truc. Il ne ressemble pas il y a une alternative, comme UIWebView offre pas d'accès direct vers les DOM.
En vue du contrôleur de
viewDidLoad
je charge le contenu HTML dans une webview et lorsque la charge est terminée, exécutez un peu de javascript pour revenir à la hauteur d'élément.J'ai été très heureux de trouver des réponses à vos questions, le javascript truc a bien fonctionné pour moi.
Cependant, je voulais dire qu'il y a aussi le "sizeThatFits:" la méthode :
Nous avons à définir une taille différente de zéro, mais en dehors de cela, il fonctionne toujours !
Généralement, parce qu'avec le UIWebViews, elle ne semble fonctionner que sur le deuxième chargement (j'utilise le "loadHTMLString:" la méthode, et oui j'appelle la "sizeThatFits:" de la délégué "didFinishLoad:" la méthode).
C'est pourquoi j'ai été très heureux de trouver votre solution qui fonctionne dans tous les cas.
height
! Je suis de mauvaise valeur lorsque l'utiliser avec de nombreuses imagesCela semble fonctionner. Pour l'instant.
Il devrait en toute sécurité de retour 0 si elle échoue.
Le problème avec
-sizeThatFits:
est qu'il ne fonctionne pas de la case, au moins sur iOS 4.1. Elle retourne la taille actuelle de la webView (peu importe si elle est appelée avec CGSizeZero ou un arbitraire de taille non nulle).J'ai trouvé que ça fonctionne vraiment si vous réduisez la hauteur du cadre de la webView avant de faire appel à
-sizeThatFits:
.Voir ma solution: Comment faire pour déterminer la taille du contenu d'une UIWebView?
Si vous avez de mauvaises valeurs avec sizeThatFits la première fois, mais pas après, ici une cause possible que j'ai rencontré : un bug de CSS externe.
Il semble webViewDidFinisLoad est appelé à bientôt, avant de CSS externe sont récupérés, et le document web entièrement construit.
Je pense que le bug disparaît si vous recharger en raison de la cache.
Un truc : Précharge votre CSS avec un mannequin UIWebView bientôt dans votre application.
SDK : IOS4
de la mesure d'une webview fonctionne, mais seulement quand il a chargé son contenu
publicité: 😀 voir mon M42WebviewTableViewCell classe sur github qui est en lutte avec ce
La meilleure approche est d'utiliser
scrollView.contentSize.height
propriété, comme ci-dessous.