UIWebView - 自动调整大小,以便不需要滚动(在webView本身中)

时间:2010-06-04 21:49:58

标签: iphone uiwebview uiscrollview uitextview autoresize

我正在尝试使用UIWebView来显示高于iPhone屏幕的内容,而无需滚动UIWebView本身。

UIWebView被放置为UIScrollView的子视图,以及我希望UIScrollView使用向上和向下滚动的其他一些对象UIWebView

我知道您可以使用UITextView这样做:

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

UIWebView不会从UIScrollView继承,因此不包含contentSize - 属性。

我真的想保留UIWebView,因为我得到的数据是HTML块。

谢谢!

2 个答案:

答案 0 :(得分:14)

事实上,不需要Javascript! 在UIView中有一个很好的方法:

- (CGSize)sizeThatFits:(CGSize)size

你传递任何东西(这里没有意义),它返回它想要的大小,使用它的内容(子视图等)来计算大小。

当然,由于UIWeb中的内容在异步中加载,因此您应该在加载webview之后执行此操作,例如在UIWebViewDelegate方法中:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    CGSize size = [webView sizeThatFits: CGSizeMake(1.0f, 1.0f)]; // Pass about any size
    CGRect frame = webView.frame;
    frame.size.height = size.height;
    webView.frame = frame;
}

Et瞧!

答案 1 :(得分:7)

我认为你能够做到这一点的唯一方法是使用一些javascript来获取网页的大小并调整UIWebView控件的大小。

以下内容应该可以解决问题

int content_height = [[theWebView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue];
CGRect rect = theWebView.frame;
rect.size.height = content_height;
theWebView.frame = rect;

您可能需要在内容高度上添加某种软糖因子。