iOS webView以及WKWebView計算高度慢,加快載入速度等問題

來源:互聯網
上載者:User

我們開發詳情頁面,有的時候需要計算webView或者WKWebView的高度,然後再計算scrollView的高度,把webView放到scrollView上面。但是計算webView高度這個過程很耗費時間,原因是以下代理,網頁徹底載入完才會計算出來高度,我們需要的是先算出高度,先出現網頁的文字,至於網頁的圖片,可以慢慢緩衝顯示全。這樣不至於白屏時間過長。


- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation

{

    /**計算高度*/

    dispatch_async(dispatch_get_global_queue(0,0), ^{

        [_webView evaluateJavaScript:@"document.documentElement.offsetHeight" completionHandler:^(id_Nullable result, NSError *_Nullable error) {

            //擷取webView高度

            CGRect frame = _webView.frame;

            frame.size.height = [result doubleValue] + 50;

            _webView.frame = frame;

            _scrollViewHeight = 220 + _webView.height;

            _scrollView.contentSize = CGSizeMake(kScreenWidth, _scrollViewHeight);

        }];

    });

}
註:上邊的代理被樓主棄用,太耗費時間了。取而代之用下面的方法:(用的WKWebView舉例說明的)
第一步:添加觀察者

[_webView.scrollViewaddObserver:selfforKeyPath:@"contentSize"options:NSKeyValueObservingOptionNewcontext:nil];


第二步: 觀察者監聽webView 的contentSize變化

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

    if ([keyPathisEqualToString:@"contentSize"]) {

        dispatch_async(dispatch_get_global_queue(0,0), ^{

            //document.documentElement.scrollHeight

            //document.body.offsetHeight

            [_webViewevaluateJavaScript:@"document.documentElement.offsetHeight"completionHandler:^(id_Nullable result, NSError * _Nullable error) {

                CGRect frame =_webView.frame;

                frame.size.height = [resultdoubleValue] + 50;

                _webView.frame = frame;

                _scrollViewHeight =220 + _webView.height;

                _scrollView.contentSize =CGSizeMake(kScreenWidth,_scrollViewHeight);

            }];

        });

    }

}
第三步:移除觀察者

- (void)dealloc

{

    [_webView.scrollViewremoveObserver:selfforKeyPath:@"contentSize"];

}


總結:以上這個方法,不能說特別快速載入,但是在我這裡速度至少提升了幾倍。我也在找更好的最佳化方法,比如緩衝等等。有知道的更好的方法的小夥伴,歡迎貼出來,樓主感激。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.