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

9
我正在尝试使用UIWebView来显示高于iPhone屏幕的内容,而无需在UIWebView中滚动。
UIWebView作为子视图放置在UIScrollView中,同时与其他一些对象一起滚动 我知道可以使用UITextView来实现此功能:
CGRect frame = _textView.frame; frame.size.height = _textView.contentSize.height; _textView.frame = frame;

但是UIWebView没有继承UIScrollView,因此不包含contentSize属性。

我希望仍然使用UIWebView,因为我获取的数据是以HTML块形式呈现的。

谢谢!

2个回答

14

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

- (CGSize)sizeThatFits:(CGSize)size

这个方法可以传递任何东西(在这里并没有真正意义),它将使用其内容(子视图等)计算大小,并返回它想要的大小。

当然,由于UIWebView中的内容加载是异步的,因此您应该在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;
}

就这样!


规格:这种方法有点用,但是当webView包含图片时就不行了,可能是因为这些图片在那个时候还没有完全加载。 - Emil
1
啊...所以UIWebView在基本HTML加载完成时通知,而不是整个页面。无论如何,如果您的图像更改了布局,则您的页面不符合W3C标准(应在img标记中包含大小):p - jv42
不是我的网页;) 谢谢,不过。 - Emil
1
似乎自动布局与这种方式的调整不兼容。事实上,UIWebView 的大小根本没有改变。在这里使用自动布局是否需要特殊处理? - powerj1984

7
我认为你能够做到这一点的唯一方法是使用一些JavaScript来获取网页的大小并调整UIWebView控件的大小。
以下类似的代码应该可以解决问题。
int content_height = [[theWebView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue];
CGRect rect = theWebView.frame;
rect.size.height = content_height;
theWebView.frame = rect;

您可能需要为内容高度添加某种调整因素。


不好意思,这似乎只是隐藏了UIWebView。不过,这个想法不错。 - Emil
4
在使用上述代码前,你可能需要等待UIWebView加载完你的内容。在一些网络应用中,我成功地使用了上述代码的变体来调整嵌入的IFRAME标签大小。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接