这是一篇回忆写的文章,当时开发太忙,无法写下:
1.白屏问题:
当app背景是黑色的时候,WKWebView加载时会闪过一篇白色。
这个问题在UIwebView时代就有了,好像浏览器的背景色一定默认是白色似的。
先将WKWebView背景色设为黑色,在将html背景色设为黑色
打上断点,观察UI分层,在里面是有原生UI图层是白色,而且这个子view我们无法操作,尤其是在swift中,KVC编码失效,常量机制。
解决方法:
这个方法比较笨,只是能临时解决问题。
将WKWebView设置为透明色。在加载完html与js文本后,适当延迟0.2s后将透明度改为1
这个时候白屏闪现的过程就被隐藏掉了。
原理:父view透明时,子view的颜色不显示
缺点:有延迟效果。
改进:1.如果不是黑色或者暗色背景,请不要加这个延迟效果。2.可以在html上面添加一层背景色层,任何时候不轻易更新这个背景色层。
2.js执行时机:
WKWebView这点做得比UIWebView好。
WKWebView的代理方法didFinishedload方法执行后,在执行evaluatejs的方法时,js函数一定可以找到。
UIWebView的代理方法,haveLoaded之后,执行js方法时,会报错,尤其是一个界面有多个UIWebView组件时,很容易找不到js方法,报错:undefined is not function或者获取的js对象是jsValue(undefined)
在UIWebView时代,可以采取延迟获取,迭代获取的方法,经过我的实践,4个UIWebView组件,最多的要获取三次,才能获取js对象成功
3.字体小
相同的html代码,如果你没有在head部分标注尺寸信息,那么在最终展示上:UIWebView上面的字体明显大于WKWebView
在head部分添加以下html代码即可
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'>
如果不一定要求是屏幕宽度,可以改成下面方式也行
<meta name='viewport' content='width=100%, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'>