我正在尝试制作一个tumblr应用。当我为任何帖子发出获取请求时,他们会回复身体的html。目前我正在使用html并将其推入uiwebview。我设置了视图的宽度,因为它始终是相同的,但我无法弄清楚如何计算它的高度。我想把它放到一个合适的位置,所以我需要弄清楚每个细胞的高度。
所以基本上可以在渲染html之后获得uiwebview的高度吗?
答案 0 :(得分:2)
我使用javascript技巧来做到这一点。
在将HTML字符串加载到UIWebView之前,您需要将以下javascript添加到HTML字符串中。
NSMutableString *javaScript = [[NSMutableString alloc] init];
[javaScript appendString:@"<script type=\"text/javascript\">"];
[javaScript appendString:@" window.onload = function() {"];
[javaScript appendString:@" window.location.href = \"ready://\" + document.body.offsetHeight;"];
[javaScript appendString:@" }"];
[javaScript appendString:@"</script>"];
当UIWebView完成渲染并且知道所需的UIWebView高度以显示整个内容而不上下滚动时,将触发此javascript。高度由javascript变量document.body.offsetHeight
给出javascript会将UIWebView导航到url scheme ready://
document.body.offsetHeight的值存储为“host”
您必须使用UIWebView委托拦截此请求,以便UIWebView无法导航到ready://
- (BOOL)webView:(UIWebView*)webView
shouldStartLoadWithRequest:(NSURLRequest*)request
navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = [request URL];
if (navigationType == UIWebViewNavigationTypeOther) {
if ([[url scheme] isEqualToString:@"ready"]) {
float contentHeight = [[url host] floatValue];
NSLog(@"web height:%f",contentHeight);
//You can use the contentHeight to resize the UIWebView frame
return NO; //Prevent the UIWebView to navigate to this ready:// scheme
}
}
return YES;
}
“ready”方案只是一个任意名称。基本上,JavaScript要求UIWebView导航到ready:// 234
“ready”是自定义URL方案
“234”是UIWebView在不滚动的情况下呈现HTML内容所需高度的示例。