ios - Pourquoi le contenu affiché diffère-t-il parfois lors du chargement du même texte HTML à l'aide de WKWebView?
阿神
阿神 2017-07-06 10:35:34
0
1
2304

Comme le montre l'image :

La partie de la boîte rouge est WKWebView, celle de gauche est un affichage normal et celle de droite est un affichage anormal.
J'ai exécuté le contenu hautement adaptatif de la vue Web dans le rappel de fin de chargement de la page Web :

// 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    
    if ([webView isFinishLoading] == YES) {
        self.webView.height = self.webView.scrollView.contentSize.height;

La hauteur obtenue sur les côtés gauche et droit est la même, mais le côté droit n'est pas entièrement affiché et est également agrandi.

Ce qui me dérange le plus, c'est que parfois le chargement est complet et parfois incomplet.

Ce qui m'embrouille encore plus, c'est que si j'écris un lazyload pour le retarder d'une seconde, l'affichage à ce moment sera à nouveau correct :

// 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    
    if ([webView isFinishLoading] == YES) {
        
        __weak typeof(self) weakSelf = self;
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            // 1秒后异步执行这里的代码...
            
            weakSelf.webView.height = weakSelf.webView.scrollView.contentSize.height;

Si j'utilise UIWebView au lieu de WKWebView, je ne rencontrerai pas ce problème.

Quelqu'un peut-il me dire pourquoi la page ne s'affiche parfois pas entièrement ? . . Merci d'avance

阿神
阿神

闭关修行中......

répondre à tous(1)
代言

J'ai également rencontré cette situation. Parfois, le contenu de la page ne s'affiche pas complètement. Plus tard, j'ai découvert que la valeur de didFinishNavigation 有时候会调用多次, 而第一次的时候webView.scrollView.contentSize打印为(width = 0, height =0). 所以在isFinishLoading 后, 直接设置webView.height就会出现内容不全.
解决:
判断webView.scrollView.contentSize.height为非0, 再设置webView.height; 或者用KVO监听webView.scrollView.contentSize avait changé.

.

Hauteur du juge

if (!self.webView.isLoading) {
    if(webView.scrollView.contentSize.height > 0)
    {
        self.webView.height = self.webView.scrollView.contentSize.height;
        [self.webView sizeToFit];
    }
}

Contenu du moniteur KVOTaille

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (!self.webView.isLoading) {
        if([keyPath isEqualToString:@"scrollView.contentSize"])
        {
            webView.height = webView.scrollView.contentSize.height;
            [webView sizeToFit];
        }
    }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal