白酒清茶无别事
我在等风也等你

Scrollview嵌套webview添加自定义视图

其实这个需求应该还是蛮常见的,比如scrollview加载一个网页,然后在需要在网页的顶通和底通添加自定义view,例如广告位啊。好的,既然需求有了,那我就在理理思路怎么实现。

  1. 如果直接在webview上处理的话,很难去处理原网页上的内容,加载自定义的view,无奈放弃。。。
  2. 如果直接addView到webview上….肯定不行。
  3. 如果底部用一个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了

赞(0) 打赏
未经允许不得转载:十一同学 » Scrollview嵌套webview添加自定义视图
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏