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
;
}
|