我正在加载一个html到webview,它可以包含到twitter,vimeo,youtube或简单的简单html的嵌入链接。
出于测试目的,我使用与计算高度相同的方式创建了一个简单的视图,并且我有一个表格视图,它取决于计算出的高度以正确显示webview。
问题是计算的高度是错误的,因此嵌入的html没有正确显示。
这是我的代码的相关实践:
- >这会在虚拟webview中加载html字符串,这是计算正确高度的唯一目的,虚拟视图用于触发html的加载:
- (void) loadHtml:(NSIndexPath *) indexPath andString:(NSString *) htmlString {
CGFloat webViewFrame = 216 * [[UIScreen mainScreen] bounds].size.width / 320;
wvVtemp = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, webViewFrame, 5)];
wvVtemp.delegate = self;
[wvVtemp loadHTMLString:htmlString baseURL:nil];
[dummyView addSubview:wvVtemp];
[dummyView bringSubviewToFront:wvVtemp];
}
- > WebView委托,是webview没有加载它会触发计算高度的方法:
#pragma mark - uiwebview delegate
- (void)webViewDidStartLoad:(UIWebView *)webView {
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
if (!webView.isLoading) {
[self getHeightForWebViewT:webView];
}
}
- (void)webViewDidFinishLoad:(UIWebView *)webView;{
if (!webView.isLoading) {
[self getHeightForWebViewT:webView];
}
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
return true;
}
- >计算webview的高度:
- (void) getHeightForWebViewT:(UIWebView *) webView {
[webView sizeToFit];
NSString *output = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"];
calculatedHeight = [output floatValue];
NSLog(@"Calculated indexPath wvTemp: -> height: %@", output);
//[self.tView reloadRowsAtIndexPaths:@[webView.indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tView reloadData];
}
- > HTML我正在呈现:
<html><body>Begin
<blockquote class="twitter-tweet" lang="en">
<p dir="ltr" lang="en">Apple seeds OS X El Capitan beta 7 to developers <a href="http://t.co/DBhpDdyXKU">http://t.co/DBhpDdyXKU</a> <a href="http://t.co/sWkTcOVMvt">pic. twitter.com/sWkTcOVMvt</a></p>
— iDownloadBlog (@iDownloadBlog) <a href="https://twitter.com/iDownloadBlog/status/634096776107048961">August 19, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><br />
End</body></html>
目前这个解决方案不仅仅适用于twitter嵌入代码,最终布局是这样的(它从html中缺少“End”)
这个问题的另一个问题是,不久前这种方法正常运行,在最近几周它开始只是不时地工作,现在输出总是一样的。
我已经尝试了我在谷歌找到的所有解决方案,我记得,但目前我已经陷入困境......任何帮助/小费都会非常感激。
答案 0 :(得分:0)
您可以直接获取它,而无需使用Javascript
- (void)webViewDidFinishLoad:(UIWebView *)webView {
// webViewHeight = webView.scrollView.contentSize.height;
}
如果您想使用Javascript,请尝试使用 document.body.offsetHeight
替换 document.body.scrollHeight