suchen

Heim  >  Fragen und Antworten  >  Hauptteil

ios - Warum unterscheidet sich der angezeigte Inhalt manchmal, wenn derselbe HTML-Text mit WKWebView geladen wird?

Wie im Bild gezeigt:

Der rote Kastenteil ist WKWebView, der linke Teil ist die normale Anzeige und der rechte Teil ist die abnormale Anzeige.
Ich habe den hochadaptiven Webview-Inhalt im Rückruf zum Abschluss des Ladens der Webseite ausgeführt:

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

Die auf der linken und rechten Seite erhaltene Höhe ist gleich, die rechte Seite wird jedoch nicht vollständig angezeigt und ist ebenfalls vergrößert.

Was mich am meisten verwirrt, ist, dass der Ladevorgang manchmal vollständig und manchmal unvollständig ist.

Was mich noch mehr verwirrt, ist, dass die Anzeige zu diesem Zeitpunkt wieder korrekt ist, wenn ich einen Lazy Load schreibe, um ihn um eine Sekunde zu verzögern:

// 页面加载完成之后调用
- (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;

Wenn ich UIWebView anstelle von WKWebView verwende, tritt dieses Problem nicht auf.

Kann mir jemand sagen, warum die Seite manchmal nicht vollständig angezeigt wird? . . Vielen Dank im Voraus

阿神阿神2703 Tage vor2311

Antworte allen(1)Ich werde antworten

  • 代言

    代言2017-07-06 10:37:34

    这种情况我也遇到过, 偶尔会出现页面内容显示不全的情况. 后来发现didFinishNavigation 有时候会调用多次, 而第一次的时候webView.scrollView.contentSize打印为(width = 0, height =0). 所以在isFinishLoading 后, 直接设置webView.height就会出现内容不全.
    解决:
    判断webView.scrollView.contentSize.height为非0, 再设置webView.height; 或者用KVO监听webView.scrollView.contentSize的值变化. 这两种都可以.


    判断高度

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

    KVO监听contentSize

    -(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];
            }
        }
    }

    Antwort
    0
  • StornierenAntwort