WKWebView加载HTML字符串 获取高度渲染高度
这篇文章算是个小记,可能只会暂时描述问题和解决问题方法,原理的方面之后具体写在Diary里面
具体的需求是这样子的,简书APP文章详情页面。。。应设计师要求我就不po图了,可以打开看一下简书APP。。。
大致就是这样子有一个下拉可以放大上划navigationBar
淡出的交互的头图,下面接着是一个需要加载html字符串的WKWebView
(这里为什么用WK,大家都知道UIWebView
的内存损耗简直爆炸,而且我们的项目是适配iOS8以上,所以当然是最佳之选),下面还要有一个UIT ableView
来展示专题的评论,很像简书有木有。。。
我大致就是这样处理的,将WKWebView.scrollView
的contentInset
属性的top
值设置为图片的高度,然后将图片视图加到WKWebView.scrollView
上面,然后将整个一个WkWebView
作为头视图加到UITableView
上面,这样就不用处理因为多层scrollView
嵌套而带来的手势冲突。
下面讲讲WKWebView
的处理
1 | p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 14.0px 'Helvetica Neue'}span.s1 {font: 13.0px 'Helvetica Neue'}span.s2 {color: #00a2ff} |
以上就是后台传过来的数据,看到这个得我是这样的
让我加载个这东西?
果然,第一个出问题的是图片,这个图片让我想起了iPhone20
废话不多说,我将HTML代码处理的一下,结果是这样的
1 | let html = "<div id = \"content\"><style type=\"text/css\">img{width : 100% ; height : auto; display: block;}</style>\(result)</div>" |
首先先用一个div
将其包起来,起一个自己比较喜欢的id
里面写一个样式让图片自适应屏幕宽的100%(加载出来不是iPhone的屏宽,左右有一点留白),高度根据原有的长宽比会自适应,高高兴兴的加载了出来发现图片正常了,但因为我们的html字符串加载不满一屏下面有一大片留白,如果运营M(zu)M(zong)那天不想写,直接一个图几句话我下面一大片空白就醉了,首先我们需要写一点js获取一下加载后的高度,直接上代码
1 | //需要设置代理处理webView加载完成之后的状态 |
1 | extension SubjectDetailViewController : WKNavigationDelegate{ |
首先是这段"document.getElementById(\"content\").offsetHeight;")
,获取的是content
标签中代码加载后的滚动范围,在执行后返回的高度的单位不知道是什么,5s中半屏的区域返回了1000左右,可能是px,经过多次尝试之后发现返回的高度和苹果的pt是1:3的关系
之后的判断是高度是否大于屏高减去tabbar的高度,也就是屏幕的最大显示范围,大于的时候开启WKWebView.scrollView
的滑动功能,当小于的时候也就是不满一屏,直接重置webView的frame.size.height
并关闭滑动手势,这样一来下面的留白就没有了,就像是简书APP的文章详情一样,但是在webView超过一屏的时候,从webView到评论列表会有一个手势转化上的卡顿,几乎没有对用户造成影响