UIWebView内部UIScrollView内容大小

时间:2013-01-01 14:05:17

标签: iphone ios xcode uiwebview uiscrollview

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

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

1)将UIWebView作为UIScrollView的子视图。

2)为setScrollEnabled:NO调用UIWebView以禁用其原生滚动。

3)将UIScrollViewUIWebView的内容大小设置为UIWebview内加载的HTML字符串的大小。

我正在使用iOS 6和StoryBoards。我添加了UIWebView作为UIScrollView的子视图。

然后在我的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内容的大小没有显示其大小。

enter image description here

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

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

3 个答案:

答案 0 :(得分:2)

我想我可以在这里说清楚。我认为你混淆了框架大小和内容大小。首先,我将描述方法论,然后提出具体的建议。

<强>方法

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

具体建议

  • 您发布的“fittingSize”代码看起来不合适。该代码的目的是设置webView的框架。使用NSLog或断点查明是否设置了Web内容的完整大小。
  • 请注意,您发布的javascript代码的用途与您发布的“fittingSize”代码相同。检查哪一个产生正确的输出。
  • 尝试找出webView和scrollView的帧大小以帮助您进行调试。最好的方法是设置不同的背景颜色:setBackgroundColor:[UIColor redColor]
  • 我最好的猜测是webView.frame.size的设置不够大。

答案 1 :(得分:2)

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

  1. 禁用autoLayout。
  2. 在更改webView框架大小后,使用以下代码添加高度约束到webView:

    self.webViewHeightConstraint.constant = fittingSize.height; [webView updateConstraints];

答案 2 :(得分:0)

为了获得UIWebView的内容的高度,我强烈推荐现象&#39;现象&#39;在这里:http://stackoverflow.com (不是接受的答案,下面的答案。) 他/她建议不要使用&#39; CGSizeZero&#39;,并提供更好的解决方案。