【问题收集】页面中嵌套webView,webView按照内容完整显示

需求:

在页面中嵌套webView,需要webView按网页的实际大小显示

遇到的问题:

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ } 方法中,并不能够每次都准确的获取到网页加载成功后的实际大小

原因:

网页重定向:http://www.jianshu.com/p/897e2d82ee43


实现:

这里,我在tableView的headerView中嵌套一个WKWebView,用来显示完整的网页内容


- (WKWebView *)webView {
       if(_webView == nil) {
            _webView = [[WKWebView alloc] init];
            _webView.navigationDelegate = self;
            _webView.frame = self.view.bounds;
            [_webView sizeToFit];
       }
       return _webView;
}
//解析json数据
CKAGHtmlModel *htmlModel = [CKAGHtmlModel mj_objectWithKeyValues:self.detailModel.trendsPreview.trendsModel.content];
//baseUrl不能够为空,随便传入一个url
NSURL *url = [NSURL URLWithString:@"http://www.congacademy.com/"];
//htmlModel.html为解析出来的html代码
[self.webView loadHTMLString:htmlModel.html baseURL:url];
self.tableView.tableHeaderView = self.webView;

思路一:

在执行 - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ } 方法的时候,虽然网页可能没有被完全加载出来,这个时候获取到的网页的大小不一定准确;我们可以在第一次调用 - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ } 方法的时候,让webView重新载入一次网页数据。由于网页的数据上一次已经加载过了,再次加载会使用到里面的缓存,加载速度比第一次要快的多,而且这一次能够或得到网页的实际大小


{
    BOOL _shouldReload;
}

  _shouldReload = YES;

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    CGSize size = [self.webView sizeThatFits:CGSizeZero];
    // 设置webView的高度,这里使用 sd_layout
    self.webView.sd_layout.heightIs(size.height);
    [self setupAutoHeightWithBottomView:self.webView bottomMargin:24];
    [self layoutSubviews];

    if (self.delegate && [self.delegate respondsToSelector:@selector(webViewFinishLoad:)]) {
        [self.delegate webViewFinishLoad:webView];
    }
    
    // 第一次加载网页,_shouldReload = YES
    if (_shouldReload) {
        _shouldReload = NO;
        // 重新加载一次网页数据
        CKAGHtmlModel *htmlModel = [CKAGHtmlModel mj_objectWithKeyValues:self.preview.trendsModel.content];
        NSURL *url = [NSURL URLWithString:@"http://www.congacademy.com/"];
        [self.webView loadHTMLString:htmlModel.html baseURL:url];
    }
}

思路二

通过重定向中给出的方法进行设置
网页重定向:http://www.jianshu.com/p/897e2d82ee43

思路三

UIWebView(未测试过)

float webViewHeight = [[webView stringByEvaluatingJavaScriptFromString: @"document.body.scrollHeight"] floatValue];  

WKWebView(测试获得正确的高度)

[webView evaluateJavaScript:@"document.body.scrollHeight" completionHandler:^(id _Nullable result, NSError * _Nullable error) {  
         double webViewHeight = [result doubleValue];  
}];  

相关资料

iOS Webview自适应实际内容高度的4种方法详解
http://www.jb51.net/article/93254.htm

你可能感兴趣的:(【问题收集】页面中嵌套webView,webView按照内容完整显示)