WKWebView之footer

研究了下iOS8出来的WKWebView,突发奇想的觉得怎么给增加个footer呢,然后就有了这篇小记,为方便下次自己查阅以及有这个需求的小伙伴们查阅。废话少说,直接上码,

老规矩先看效果图:

Untitled.gif

一、 首先分析一下WKWebView的内部结构,发现,它跟UIWebView不一样了,其父亲居然变成了UIView了(nnd,这要是页面超过一屏了怎么滚动),继续找,发现有一个属性,scrollview! my gad... readonly!好吧,我们要实现footer,就是要靠它了,
二、来看看具体实现步骤:
2.1 获取网页内容的真是高度,在WKWebView中使用回调来获取高度,如下:
[webView evaluateJavaScript:LFWKWebViewH completionHandler:^(id _Nullable result , NSError * _Nullable error) { [result floatValue] };

2.2 根据实际高度来决定footer的y值,代码如下(比如我加点赞按钮)
self.containerView = [[UIView alloc] initWithFrame:CGRectMake(0, [result floatValue]-10, SCREEN_WIDTH, 60)];
【注意看y值,这个是容器视图,包装点赞按钮和点赞数量控件的容器】

前排--->插一句....关键是这里,大家要注意,分析一下这个WKWebView中的scrollview的结构: 如下
=>>通过打印这个scrollview.subViews可以发现,有一个WKContentView,这个就是装载网页加载的内容的类,至于还有其他子控件就不管了,==, 是不是发现了什么,对没错,你想的没错,就是把这个你要加的footer add到scrollview中去,使其跟WKContentView类处于同一个层次上,这个时候,就形成了我们想要的footer了,比如我这样做:
// 添加点赞按钮
[self.lf_wkWebView.scrollView addSubview:self.containerView];

2.3 ,最后一步,调整这个WKContentView的高度,通过遍历subViews的方法,设置高度为[result floatValue],如下:
if ([className isEqualToString:LFWKContentView]) {
lf_view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [result floatValue]);
return;
}
最后就是大功告成了,之前在网上看了很多的文章,发现这方面的文章很少,借此记录下来,希望能帮到有这样业务需求的小伙伴们,请大家多多指点。

你可能感兴趣的:(WKWebView之footer)