Comment faire pour déterminer la taille du contenu d'un WKWebView?

Je suis expérimenter avec le remplacement d'un allouée dynamiquement instance de UIWebView avec un WKWebView exemple lors de l'exécution sous iOS 8 et plus récentes, et je ne peux pas trouver un moyen de déterminer la taille du contenu d'un WKWebView.

Ma vue web est intégré dans un plus grand UIScrollView conteneur, et donc j'ai besoin de déterminer la taille idéale pour l'affichage web. Cela me permettra de modifier son image pour montrer l'ensemble de son contenu HTML sans avoir besoin de faire défiler l'affichage web, et je vais être en mesure de régler la bonne hauteur pour le défilement de l'affichage du conteneur (par la mise en scrollview.contentSize).

J'ai essayé sizeToFit et sizeThatFits sans succès. Voici mon code qui crée un WKWebView instance et l'ajoute à la conteneur scrollview:

//self.view is a UIScrollView sized to something like 320.0 x 400.0.
CGRect wvFrame = CGRectMake(0, 0, self.view.frame.size.width, 100.0);
self.mWebView = [[[WKWebView alloc] initWithFrame:wvFrame] autorelease];
self.mWebView.navigationDelegate = self;
self.mWebView.scrollView.bounces = NO;
self.mWebView.scrollView.scrollEnabled = NO;

NSString *s = ... //Load s from a Core Data field.
[self.mWebView loadHTMLString:s baseURL:nil];

[self.view addSubview:self.mWebView];

Voici un expérimentales didFinishNavigation méthode:

- (void)webView:(WKWebView *)aWebView
                             didFinishNavigation:(WKNavigation *)aNavigation
{
    CGRect wvFrame = aWebView.frame;
    NSLog(@"original wvFrame: %@\n", NSStringFromCGRect(wvFrame));
    [aWebView sizeToFit];
    NSLog(@"wvFrame after sizeToFit: %@\n", NSStringFromCGRect(wvFrame));
    wvFrame.size.height = 1.0;
    aWebView.frame = wvFrame;
    CGSize sz = [aWebView sizeThatFits:CGSizeZero];
    NSLog(@"sizeThatFits A: %@\n", NSStringFromCGSize(sz));
    sz = CGSizeMake(wvFrame.size.width, 0.0);
    sz = [aWebView sizeThatFits:sz];
    NSLog(@"sizeThatFits B: %@\n", NSStringFromCGSize(sz));
}

Et voici la sortie est généré:

2014-12-16 17:29:38.055 App[...] original wvFrame: {{0, 0}, {320, 100}}
2014-12-16 17:29:38.055 App[...] wvFrame after sizeToFit: {{0, 0}, {320, 100}}
2014-12-16 17:29:38.056 App[...] wvFrame after sizeThatFits A: {320, 1}
2014-12-16 17:29:38.056 App[...] wvFrame after sizeThatFits B: {320, 1}

La sizeToFit appel n'a aucun effet et sizeThatFits renvoie toujours à une hauteur de 1.

  • Mise à jour: je suis toujours à la recherche d'une solution. Si je charge le contenu distant via [self.mWebView loadRequest:req]), la taille est disponible via l'auto.mWebView.le scrollView.contentSize à l'intérieur de didFinishNavigation. Mais si je charge mon contenu via [self.mWebView loadHTMLString:s], la taille n'est pas disponible jusqu'à ce que quelque temps plus tard. À l'aide de loadRequest avec un dataURL ne résout pas le problème. Et je ne sais pas quand "plus tard" est.
  • Je me demande si il ne pourrait jamais être une réponse significative à cela? Considérer qu'à tout moment une page web peut de la taille de son contenu à la taille de sa fenêtre, alors comment pourrait-il en être que nous pourrions modifier la taille de la fenêtre à la taille de son contenu? Je pense qu'il y a une raison WKWebView ne fournit pas un intrinsicContentSize, il n'y a pas une seule significatif "intrinsèque" de la taille.
InformationsquelleAutor Mark Smith | 2014-12-16