美文网首页iOS开发技术讨论swift编程开发程序员
WKWebView使用注意事项(cell内嵌)

WKWebView使用注意事项(cell内嵌)

作者: 栈溢出 | 来源:发表于2016-05-09 17:49 被阅读2588次

cell内嵌WKWebView时,有部分人通过代理中页面加载完成后调用的这个方法,如下

// 页面加载完成之后调用

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

//    CGFloat scrollHeight = webView.scrollView.contentSize.height;

}

来获取wkwebview的内容高度来设置cell高度。往往发现返回的高度不对。

通过kvo观察这个webView.scrollView.contentSize,你会发现上面的代理执行的方法返回的WKWebView的content并没有被修改。

所以就不要和uiwebview一样用这个方法了。

直接从JS里拿吧~

[webView evaluateJavaScript:@"document.body.offsetHeight;"completionHandler:^(id _Nullable result,NSError *_Nullable error) {

//获取页面高度,并重置webview的frame

}];

还有一点需要注意:最好等到webview加载完成在内嵌cell。不然坑好多~

相关文章

网友评论

  • 夜央未尽:这个方法还是不灵光 还在找
    张三疯疯子:找到没
  • zuolingfeng:赞,解决了我的大问题。就是调用evaluateJavaScript:@"document.body.offsetHeight;"
    方法需要放到didFinishNavigation里面。
  • 给你快乐:赞,现在就在做这个,但是加载出来的图片大小怎么改变呢?楼主有没有解决办法?要图片大小适应屏幕
    兔_小白:创建WKWebView时,添加一下代码
    // 自适应屏幕宽度js
    NSString *jSString = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";

    WKUserScript *wkUserScript = [[WKUserScript alloc] initWithSource:jSString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
    WKUserContentController *userContentController = [[WKUserContentController alloc] init];

    [userContentController addUserScript:wkUserScript];

    在加载HTML的时候添加一下代码
    // 手动改变图片适配问题,拼接html代码后,再加载html代码
    NSString *myStr = [NSString stringWithFormat:@"<head><style>img{max-width:%f !important;}</style></head>", SCREEN_WIDTH - 20];
    NSString *str = [NSString stringWithFormat:@"%@%@",myStr, html5代码字符串];
    [self.informationWebView loadHTMLString:str baseURL:nil];
    栈溢出:@给你快乐
    你问下你们前端,前端知道的。

本文标题:WKWebView使用注意事项(cell内嵌)

本文链接:https://www.haomeiwen.com/subject/rmyerttx.html