8

我必须在UIWebView里面添加一些按钮和标签UIScrollView。我已经看到很多关于如何在UIWebView里面添加的问题,UIScrollView但不幸的是他们无法帮助我完成我的任务。所以请不要将其标记为重复或其他内容。

理论上,这个问题可以通过以下步骤解决:

1)制作UIWebView一个子视图UIScrollView

2) 要求setScrollEnabled:NO禁用UIWebView其本机滚动。

3) 将两者的内容大小设置为UIScrollView内部UIWebView加载的 HTML 字符串的大小UIWebview

我正在使用 iOS 6 和 StoryBoards。我已添加UIWebViewUIScrollView.

然后在我的 中webViewDidFinishLoad,我使用了以下内容:

 NSString *webHeight = [webView stringByEvaluatingJavaScriptFromString:@"document.height;"];
 NSLog(@"WebView Height %@", webHeight);

这给了我 WebView 的高度。

在 StackOverFlow 上,我遇到了以下情况。

    CGRect frame = webView.frame;
    frame.size.height = 1;
    webView.frame = frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    webView.frame = frame;

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

然后我将大小设置为UISCrollView大小UIWebView

mainScrollView.contentSize = webView.bounds.size;

我可以向下滚动到底部,但底部有一个空白区域,并且UIWebView没有根据加载的 html 内容的大小调整其大小。

在此处输入图像描述

看起来UIScrollView已将其大小更改为内容的大小,UIWebViewUIWebView并未显示所有内容。我该如何解决这个问题?

请不要建议我有关 Apple 文档中说您不应该UIWebView在内部使用的信息UIScrollView。我已经知道了,但我想根据我的项目要求使用它。

4

3 回答 3

2

我发现 webView 不反映帧大小变化的情况相同,正如杰西卡提到的那样,向下滚动时会留下空白。我检查了我的项目,发现我已经启用了 autoLayout 功能,所以我找到的解决方案是:

  1. 禁用自动布局。
  2. 在更改 webView 框架大小后,向 webView 添加高度约束,使用如下代码:

    self.webViewHeightConstraint.constant =fittingSize.height; [webView 更新约束];

于 2014-05-29T08:11:18.870 回答
2

我想我可以在这里阐明一些观点。我认为您混淆了框架大小和内容大小。首先我将描述方法,然后提出具体建议。

方法

你有一个 webView 并且你正确地禁用了它的滚动并将 contentSize 设置为 web 内容的完整大小。您还应该将框架大小设置为 Web 内容的完整大小。然后你 addSubview 这个到原点 (0,0) 的滚动视图。将 scrollView contentSize 设置为 Web 内容的完整大小。将 scrollView 框架设置为 viewController.view 的边界。

具体建议

  • 您发布的“fittingSize”代码对我来说看起来不正确。该代码的目的是设置 webView 的框架。使用 NSLog 或断点来确定这是否设置了 Web 内容的完整大小。
  • 请注意,您发布的 javascript 代码的用途与您发布的“fittingSize”代码相同。检查哪个产生正确的输出。
  • 尝试弄清楚 webView 和 scrollView 的帧大小以帮助您调试。最好的方法是设置不同的背景颜色,如下所示:setBackgroundColor:[UIColor redColor]
  • 我最好的猜测是webView.frame.size设置的不够大。
于 2013-02-17T06:50:12.870 回答
0

为了获得 UIWebView内容的高度,我强烈推荐这里的“现象”答案:http : //stackoverflow.com(不是公认的答案,下面的答案。)他/她建议不要使用“CGSizeZero”,并给出一个更好的解决方案。

于 2015-01-14T14:12:51.797 回答