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

Emi*_*mil 9 iphone uiwebview uiscrollview uitextview autoresize

我正在尝试使用a UIWebView来显示比iPhone屏幕更高的内容,而不需要滚动UIWebView自己.

UIWebView被作为一个子视图到UIScrollView,伴随着我想要的一些其他对象UIScrollView来上下滚动使用UIWebView.

我知道你可以这样做UITextView:

CGRect frame = _textView.frame; frame.size.height = _textView.contentSize.height; _textView.frame = frame;
Run Code Online (Sandbox Code Playgroud)

但是UIWebView它不会继承,UIScrollView因此不包含contentSize-property.

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

谢谢!

jv4*_*v42 14

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

- (CGSize)sizeThatFits:(CGSize)size
Run Code Online (Sandbox Code Playgroud)

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

当然,由于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;
}
Run Code Online (Sandbox Code Playgroud)

瞧瞧!


Dan*_*iel 7

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

像下面这样的东西应该做的伎俩

int content_height = [[theWebView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue];
CGRect rect = theWebView.frame;
rect.size.height = content_height;
theWebView.frame = rect;
Run Code Online (Sandbox Code Playgroud)

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

  • 您可能需要等到UIWebView完成加载内容之后,上面的代码才会提供您想要的内容.我在一些Web应用程序中成功使用了上述代码的变体来调整嵌入式IFRAME标记的大小. (4认同)