【问题标题】:How can render html so that the height is exactly fits it?如何渲染 html 以使高度完全适合它?
【发布时间】:2012-11-09 07:17:36
【问题描述】:

我正在尝试制作一个 tumblr 应用程序。当我对任何帖子发出获取请求时,他们会返回正文的 html。目前我正在使用 html 并将其推入 uiwebview。我设置了视图的宽度,因为它总是相同的,但我不知道如何计算它的高度。我正在尝试将其放入 uitable 中,因此我需要计算出每个单元格的高度。

那么基本上可以在渲染html后获取uiwebview的高度吗?

【问题讨论】:

  • 这是一个javascript问题吗?我不确定你问的是 AJAX 还是 PHP。
  • 不,这是一个 ios / HTML 问题。

标签: objective-c ios ios5 uiwebview ios6


【解决方案1】:

我使用 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 方案://

document.body.offsetHeight 的值存储为“主机”

您必须使用 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;
}

“就绪”方案只是一个任意名称。基本上,JavaScript 要求 UIWebView 导航到 ready://234

“就绪”是自定义 URL 方案

“234”是 UIWebView 在不滚动的情况下呈现 HTML 内容所需高度的示例。

【讨论】:

  • 这听起来很对。有没有办法对宽度做同样的事情?即使我在视图上强制设置宽度。它从左到右滚动。
  • 当您为“ready://”方案编写“主机”时,您可以附加任何 javascript 变量的值。 window.location.href = 'ready://' + document.body.offsetHeight + '-' +document.body.offsetWidth + ';'。 url 看起来像 ready://450-320,其中 320 是 UIWebView 的渲染宽度。在这种情况下,您需要将 [url host] 读取为 stringValue 并从“450-320”字符串值中提取值。
  • 但这会强制渲染 HTML 为那个宽度吗?
  • 不。它只报告 UIWebView 使用的宽度。就我而言,我需要更改 body 标签的 css 设置,即 微调它,直到它不会横向滚动。或者你需要添加这个标签
  • @PhongLe 如果您对答案感到满意,您应该接受该解决方案。单击此答案旁边的“白色”对勾(复选标记)。干杯。维托
猜你喜欢
  • 2021-11-19
  • 2016-12-04
  • 2011-08-12
  • 2017-10-17
  • 2011-10-15
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多