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

2017-11-13  本文已影响199人  Randy1993

前言

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

常规的思路

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

误打误撞的解决方案

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

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

闪屏的原因

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

关于opaque属性

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

关于web的渲染机制

可以参见耗子大叔的文章

上一篇下一篇

猜你喜欢

热点阅读