objective-c - 如何呈现 html 以便高度恰好适合它?

标签 objective-c ios ios5 uiwebview ios6

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

那么基本上在渲染 html 之后是否可以获得 uiwebview 的高度?

最佳答案

我使用了一个 javascript 技巧来做到这一点。

在将 HTML String 加载到 UIWebView 之前,您需要将以下 javascript 添加到 HTML String 中。

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 委托(delegate)拦截此请求,以便 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 内容所需高度的示例。

关于objective-c - 如何呈现 html 以便高度恰好适合它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13303765/

相关文章:

ios - 解析 json 并获取 NSInvalidArgumentException',原因 : '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance

ios - 如何通过presentViewController 将对象传递到 View 中?

ios - 如何使用 AVFoundation 框架创建和添加类似 Instagram 的视频过滤器 - Swift 编程

objective-c - 使用 ios5 在 iPad 应用程序上测试互联网连接

iphone - 如何以固定时间间隔突出显示表格 View 中的自定义单元格?

objective-c - 在横向模式下向 UIScrollView 添加 subview

IOS 将图像保存为相机胶卷中的圆形

iphone - 如何绘制条形图和饼图 iPhone sdk?

ios - 使用新的 HTTP v1 API 时,Firebase 数据消息未传送到 iOS

objective-c - 当uialertview进入其委托(delegate)方法时如何隐藏它?