【问题标题】:Calculate UIWebview height in UITableViewCell with twitter embed tweet使用 twitter 嵌入推文计算 UITableViewCell 中的 UIWebview 高度
【发布时间】:2015-11-15 15:57:36
【问题描述】:

我正在将 html 加载到 webview,其中可以包含指向 twitter、vimeo、youtube 或简单的简单 html 的嵌入链接。

仅出于测试目的,我使用与计算高度相同的方式创建了一个简单视图,并且我有一个表格视图,它取决于计算出的高度以正确显示 web 视图。

问题是计算出来的高度有误,所以embed html没有正确显示。

这是我的代码的相关部分:

-> 这会在 dummy webview 中加载 html 字符串,它的唯一目的是计算正确的高度,dummy view 用于触发 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>
    &mdash; 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”)

screen shoot

另一个问题是不久前它工作正常,在过去几周它只是偶尔开始工作,现在输出总是一样的。

我已经尝试了我在谷歌中找到的所有解决方案并且我记得,但目前我被困在这个......任何帮助/提示将非常感激。

【问题讨论】:

  • 我认为这是因为 twitter-tweet 在短暂延迟后正确显示。问题是我还没有找到在正确完成渲染时收到通知的方法,以便我可以更新视图高度。有什么想法吗?
  • 你找到解决方案了吗?我也遇到了同样的问题

标签: html ios twitter uiwebview


【解决方案1】:

可以直接获取,无需使用Javascript

- (void)webViewDidFinishLoad:(UIWebView *)webView {
   // webViewHeight = webView.scrollView.contentSize.height;
}

如果您想使用 Javascript,请尝试将 document.body.scrollHeight 替换为 document.body.offsetHeight

【讨论】:

  • 使用 contentSize,给出原始的 webview 框架大小。使用 offsetHeight 的结果非常相似。
猜你喜欢
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多