cari

Rumah  >  Soal Jawab  >  teks badan

ios - Mengapa kandungan yang dipaparkan kadangkala berbeza apabila memuatkan teks html yang sama menggunakan WKWebView?

Seperti yang ditunjukkan dalam gambar:

Bahagian kotak merah ialah WKWebView, yang sebelah kiri ialah paparan biasa, dan yang sebelah kanan ialah paparan tidak normal.
Saya melaksanakan paparan web kandungan yang sangat adaptif dalam panggilan balik penyiapan pemuatan halaman web:

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

Ketinggian yang diperoleh di bahagian kiri dan kanan adalah sama, tetapi bahagian kanan tidak dipaparkan sepenuhnya dan juga dibesarkan.

Apa yang paling mengelirukan saya ialah kadangkala loading sudah lengkap dan kadangkala tidak lengkap.

Apa yang membuatkan saya lebih keliru ialah jika saya menulis beban malas untuk menangguhkannya selama satu saat, paparan pada masa ini akan betul semula:

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

Jika saya menggunakan UIWebView dan bukannya WKWebView, saya tidak akan menghadapi masalah ini.

Boleh sesiapa beritahu saya mengapa halaman itu kadang-kadang tidak dipaparkan sepenuhnya? . . Terima kasih terlebih dahulu

阿神阿神2703 hari yang lalu2310

membalas semua(1)saya akan balas

  • 代言

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

    Saya juga pernah menghadapi situasi ini Sesekali, kandungan halaman tidak dipaparkan sepenuhnya Kemudian saya mendapati bahawa nilai didFinishNavigation 有时候会调用多次, 而第一次的时候webView.scrollView.contentSize打印为(width = 0, height =0). 所以在isFinishLoading 后, 直接设置webView.height就会出现内容不全.
    解决:
    判断webView.scrollView.contentSize.height为非0, 再设置webView.height; 或者用KVO监听webView.scrollView.contentSize ini adalah OK


    Ketinggian hakim

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

    KVO memantau Saiz kandungan

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

    balas
    0
  • Batalbalas