javascript - 调整 UIWebView 到它的内容

标签 javascript iphone objective-c uiwebview

在 UITextView 中,我可以将控件的高度调整为其内容,如下所示:

CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
textView.frame = frame;

但我想改用 UIWebView 来显示富文本。 UIWebVie 的内容是:

NSString *myDescriptionHTML = [NSString stringWithFormat:@"<html> \n"
                                  "<head> \n"
                                  "<style type=\"text/css\"> \n"
                                  "body {font-family: \"%@\"; font-size: %@; }\n"
                                  "</style> \n"
                                  "</head> \n"
                                  "<body>%@</body> \n"
                                  "</html>", @"helvetica",
                                  [NSNumber numberWithInt:12], @"yadayadayada..."];
[webView loadHTMLString:myDescriptionHTML baseURL:nil];

所以 UIWebView 只包含纯文本。我怎样才能获得类似于上述 UITextView 代码的结果?

最佳答案

虽然理论上JavaScript方法提供

- (void)webViewDidFinishLoad:(UIWebView *)webview
    CGRect oldBounds = [[self webview] bounds];
    CGFloat height = [[webview stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
    [webview setBounds:CGRectMake(oldBounds.x, oldBounds.y, oldBounds.width, height)];
}

应该有效(而且似乎对大多数人都有效),但对我来说无效。我尝试了多种变体,但它总是返回一个与真实内容的高度无关的尺寸。例如,一个衬垫的高度为 260 或 244。不知道为什么(很想知道)。

所以我最终按照 this 中的提示做了回答:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView {
    CGRect frame = aWebView.frame;
    frame.size.height = 1;
    aWebView.frame = frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;

    NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
}

我认为 JS 方式更优雅,但是见鬼,它对我不起作用,也不知道为什么,虽然这种方法开箱即用。

关于javascript - 调整 UIWebView 到它的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6105294/

相关文章:

objective-c - UITextView使用setContentInset时文本被截断

ios - 未调用自定义 UITableViewCell didSelectRowAtIndexPath

javascript - webpack 未加载我的字体文件

iphone - 带缓存的 NSURLRequest 不起作用

ios - Segue 不在 ViewController 之间传递数据

iphone - 静态库中的 Objective-C 类别

ios - 如何在ios游戏开发中改变背景颜色?

javascript - HTML5 视频 javascript 控件 - 重新启动视频

javascript - 在nodejs中操作html文档服务器端?

javascript - C3 API 加载调用后刻度线未与数据对齐