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

前言

由于项目中存在夜间皮肤模式,在使用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的渲染机制

可以参见耗子大叔的文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容