首页 > Web开发 > 详细

动态获取UIWebView高度

时间:2015-10-26 18:46:38      阅读:256      评论:0      收藏:0      [点我收藏+]

动态获取UIWebView高度

发表于5个月前(2015-06-08 16:47)   阅读(325) | 评论(0) 4人收藏此文章, 我要收藏
0

阿里云携手开源中国众包平台发布百万悬赏项目 »  技术分享

 

目录[-]

场景

在 App 中加载网页时,通常情况我们只需要直接初始化一个 WebView,然后去加载对应的 URL 即可,但若是有时候有些个设计是需要将 web 与原生的 UI 搭载在一起,一般情况下,webView 的 内容一页是肯定不够的,换句话说,webView 的高度是不定的,那如果原生的 UI是一个 ScrollView,高度也是不定的,那放在一起的话就会有两个 ScrollView 分别滚动,而这样的体验是很差的(尝试过的都懂)。

这里的实际场景是: 将 webView 设置为 TableView 的 headerView,tableView 可滚动,WebView 不可滚动。

尝试

我们想要的结果是将 WebView 设置为不可滚动,与原生的 UI 融合在一起,那这种情况下,我们必须得到 WebView 的内容高度,让 WebView 的高度与它所需要加载的网页的内容高度一致,才能让 WebView 将内容完全显示。

开始我是在加载完成的回调中去获取 webView 的 contentSize的高度

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    webViewHeight=[webView.scrollView contentSize].height;
    CGRect newFrame = webView.frame;
    newFrame.size.height = webViewHeight;
    webView.frame = newFrame;
    mainTableView.sectionHeaderHeight = webViewHeight;
    [mainTableView setTableHeaderView:webView];
}

用这样的方法得到高度很有可能不是web的真实高度,如果web中有很多 图片未加载完成 的话,获取的高度将小于真实高度,那在它加载完成后,内容将显示不全。

解决

最终我是监听了 webView的 contentSize,每当contentSize的值改变时就去更改webView 的frame。

[activityWebView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

然后在回调方法里改变webView的frame

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"contentSize"]) {
        webViewHeight = [[activityWebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
        CGRect newFrame       = activityWebView.frame;
        newFrame.size.height  = webViewHeight;
        activityWebView.frame = newFrame;
        [mainTableView setTableHeaderView:activityWebView];
    }
}

在页面消失时记得 remove 监听对象,否则会闪退

-(void)viewWillDisappear:(BOOL)antimated{
    [super viewWillDisappear:antimated];
    [activityWebView.scrollView removeObserver:self
forKeyPath:@"contentSize" context:nil];
}

动态获取UIWebView高度

原文:http://www.cnblogs.com/faithful/p/4911787.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!