其实这个需求应该还是蛮常见的,比如scrollview加载一个网页,然后在需要在网页的顶通和底通添加自定义view,例如广告位啊。好的,既然需求有了,那我就在理理思路怎么实现。
- 如果直接在webview上处理的话,很难去处理原网页上的内容,加载自定义的view,无奈放弃。。。
- 如果直接addView到webview上….肯定不行。
- 如果底部用一个view兜底,在view上添加webview,和自定义的view视图,那就很容易解决了。但问题又来了,就是如何准确的获取网页内容的高度,那么现在问题就转化为如何获取webview的内容高度
问题这么一转化的话,就很容易处理了。
KVO监测webview的contentSize
上代码
self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, WidthOfScreen, HeightOfScreen)];
[self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];//监测contentSize的值改变
self.webView.navigationDelegate = self;
self.webView.UIDelegate = self;
self.webView.scrollView.scrollEnabled = NO;
[self.scrollview addSubview:self.webView];
项目别的代码就不贴了,只贴最重要的部分,下面是监测部分
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if (object == self.webView.scrollView && [keyPath isEqual:@"contentSize"]) {
// we are here because the contentSize of the WebView's scrollview changed.
UIScrollView *scrollView = self.webView.scrollView;
self.webView.frame = CGRectMake(0, 0, WidthOfScreen, scrollView.contentSize.height);
self.scrollview.contentSize = CGSizeMake(WidthOfScreen, scrollView.contentSize.height + HeightOfScreen *320/667 );//后面是自定义底部视图的高度
//NSLog(@"New contentSize: %f x %f", scrollView.contentSize.width, scrollView.contentSize.height);
}
}
然后再webview的加载完成的代理方法里面写自定义view的代码放在底部兜底的view上就ok了