美文网首页iOS Dev乔帮主的遗产iOS
WKWebView白屏原因及其解决方案

WKWebView白屏原因及其解决方案

作者: zhoutq | 来源:发表于2017-12-15 21:48 被阅读1968次

白屏场景

    加载到WKWebView页面后,前/后台来回切换APP。

白屏原因

    WKWebView是一个多进程组件,Network Loading以及UI Rendering在其它进程中执行。所以UIWebView上当内存占用太大的时候,App Process会crash;而在WKWebView上当总体的内存占用比较大的时候,WebContent Process会crash,从而出现白屏现象。

问题分析

    对于如何定位白屏和解决白屏的问题在网上找了好多文章,总结如下:

    定位白屏:

    1、“检测 webView.title 是否为空” 

    解决白屏:

    1、尝试在每次请求kWebview前清理缓存;

    2、[webview reload];

    3、实现WKWebView中WKScrollview的- (void)scrollViewDidScroll:(UIScrollView *)scrollView 代理方法,然后在方法内添加代码:[webview setNeedsLayout]。

    ... ...

    以上方案基本都不行!!!

    最后,通过XCode视图调试分析WKWebView视图层次发现,白屏的WebView的中缺少一个WKCompositingView视图(WKWebView的渲染单元,属于渲染进程)。 对比如下图:

WKWebView白屏图层


WKWebView正常显示图层



解决方案

    可以遍历WKWebView的subviews,通过是否包含WKCompositingView来判断是否白屏。按照网络方案,清缓存、reload和setNeedsLayout都不能解决白屏,所以只能回收旧webview(webview = nil 后记得清除代理,移除监听,要不然会crash)创建新的 webview, 然后重新request。

// 判断是否白屏

- (BOOL)isBlankView:(UIView*)view { // YES:blank

    ClasswkCompositingView =NSClassFromString(@"WKCompositingView");

    if ([viewisKindOfClass:[wkCompositingView class]]) {

        returnNO;

    }

    for(UIView*subViewinview.subviews) {

        if (![selfisBlankView:subView]) {

            returnNO;

        }

    }

returnYES;

}

相关文章

  • WKWebView白屏原因及其解决方案

    白屏场景 加载到WKWebView页面后,前/后台来回切换APP。 白屏原因 WKWebView是一个多进程组件,...

  • 启动页白屏及黑屏解决

    一.白屏及黑屏产生的原因: 二.解决方案:

  • WKWebView白屏原因的坑

    错误日志: Could not signal service com.apple.WebKit.WebConten...

  • WKWebview 白屏

    WKWebview页面突然白屏问题 页面突然白屏可能是由于加载资源过大,内存不足,导致webview的进程被程序终...

  • WKWebView 白屏

    项目中遇到的问题 第一种:URL中出现特殊字符 '=' 等,需要编码let url = URL(string: s...

  • WKWebView的 开发坑

    1、WKWebView 白屏问题WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebV...

  • WKWebView的 开发坑

    1、WKWebView 白屏问题WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebV...

  • WKWebView那些坑

    1、WKWebView白屏问题 WKWebView自诩拥有更快的加载速度,更低的内存占用,但实际上WKWebVie...

  • WKWebView开发中遇到的坑

    1.WKWebView白屏问题 WKWebView自我拥有更快的加载速度,更低的内存占用,但实际上WKWebVie...

  • 项目中WKWebview 暂时未解决问题

    问题1 WKWebView 加载白屏问题 Could not signal service com.apple.W...

网友评论

  • jadyn_JT:请教下,isBlankView 这个方法要在哪里做判断?
  • 骑老虎喊救命:跟你一样,把上面的所有方法都试了不行,准备试一下你这个。另外问一下,出现白屏是因为我使用wkwebview后很多东西没有释放掉导致WebContent Process会crash吗
    zhoutq:是的

本文标题:WKWebView白屏原因及其解决方案

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