您的位置:首页 > 移动开发

获取UIWebView的显示内容的高度

2016-08-31 09:36 344 查看
转载自标哥博客 http://www.huangyibiao.com/archives/1341
iOS UIWebView如何获取到内容的高度呢?我们经常会遇到项目中需要使用UIWebView来加载H5页面,但是页面的高度并不确定,而我们前端需要根据内容的高度呈现出来,且不允许webview滚动。

常见的场景可能是在cell中嵌套了UIWebview,因此需要保证取得到正确的web内容的高度才能计算出cell的准确的高度;还有可能是在tableview的header需要呈现webview加载的内容,下面才是问题列表等,这些都需要知道准确的内容高度。




解决办法

通过JS来获取高度:
document.body.offsetHeight;


但是问题又来了,第一次获取到的高度可能不是正确的,比如有图片的时候,内容先加载出来了,取得的高度就不正确了。

因此,通常会调用几次,并限制次数,如果高度出现不等,说明又变化了,则需要重新构建或者更新UI!


实现代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 

#pragma mark - UIWebViewDelegate

-
(void)webViewDidFinishLoad:(UIWebView
*)webView
{

  CGFloat
height
=
[[webView
stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"]
intValue];

  if
(self.webViewHeight
!=
height
&&
self.count
<=
3)
{

    self.webViewHeight
=
height;

    self.count++;

    

    [self
updateUI];

  }

}

 

-
(BOOL)webView:(UIWebView
*)webView
shouldStartLoadWithRequest:(NSURLRequest
*)request
navigationType:(UIWebViewNavigationType)navigationType
{

  self.webViewHeight
=
webView.scrollView.contentSize.height;

  return
YES;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: