美文网首页
iOS中UIWebView、WKWebView夜间模式下闪屏的处

iOS中UIWebView、WKWebView夜间模式下闪屏的处

作者: Randy1993 | 来源:发表于2017-11-13 15:00 被阅读199次

    前言

    由于项目中存在夜间皮肤模式,在使用UIWebView、WKWebView的过程中出现了闪屏的问题,也是花了一段时间找到了解决方案,虽然是误打误撞,也希望分享出来对有需要的朋友有帮助吧。

    常规的思路

    设置控制器的背景颜色、webView的背景颜色、HTML中Body颜色一致,但是实际上并不能解决问题。

    误打误撞的解决方案

     contentWebView.opaque = NO;
     contentWebView.backgroundColor = self.view.backgroundColor;
    

    即设置webView的opaque属性为NO,并设置webView的背景色为控制器的背景色。虽然问题解决了,但是总觉得莫名其妙。

    闪屏的原因

    • webView的底色与HTML中Body底色不一致。
    • webView中用于显示HTML的子视图底色与HTML中Body底色不一致。

    解决第一个则是直接设置背景色即可。但是第二种作为私有的API是不好拿到并设置的,最简单的解决方案是设置webView的opaque属性值为NO,通过遍历子视图发现,设置webView的属性同时也会决定某些子视图的同种属性值。其实参考关于opaque属性的文章以及自己的实践发现,opaque属性并不能控制视图的显示与否。也与这里设置opaque为NO解决了问题而相互矛盾,UIWebView、WKWebView的内部实现机制我们不得而知,这里也不再做追究。

    关于opaque属性

    这是一个几乎没有用过的属性,并且他并不能决定视图是否真正的透明。关于他的介绍可以参见链接

    关于web的渲染机制

    可以参见耗子大叔的文章

    相关文章

      网友评论

          本文标题:iOS中UIWebView、WKWebView夜间模式下闪屏的处

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