UIWebView在UIScrollView中的内容大小

8

我需要在UIScrollView中添加UIWebView、一些按钮和标签。我看过很多关于如何在UIScrollView中添加UIWebView的问题,但不幸的是它们都不能帮助我完成任务。所以请不要将其标记为重复或其他内容。

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

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内容的大小进行调整。
看起来UIScrollView已经将其大小更改为UIWebView内容的大小,但是UIWebView并未显示所有内容。我该如何解决这个问题?
请不要建议我使用苹果文档中提到的不应在UIScrollView内部使用UIWebView。 我已经知道这一点,但出于我的项目要求,我想使用它。
3个回答

2

我认为我可以在这里提供一些帮助。我认为您正在混淆框架大小和内容大小。首先我将描述方法,然后提出具体建议。

方法

您有一个webView,并正确禁用了它上面的滚动并设置了contentSize为网页内容的完整大小。您还应该将框架大小设置为网页内容的完整大小。然后将其添加为scrollView的子视图,原点为(0,0)。将scrollView的contentSize设置为网页内容的完整大小。将scrollView的框架设置为viewController.view的边界。

具体建议

  • 您发布的"fittingSize"代码看起来不对劲。该代码的目的是设置webView的框架。使用NSLog或断点来查找是否设置了网页内容的完整大小。
  • 请注意,您发布的javascript代码的目的与您发布的"fittingSize"代码相同。检查哪个产生了正确的输出。
  • 尝试弄清楚webView和scrollView的框架大小以帮助您进行调试。最好的方法是像这样设置不同的背景颜色:setBackgroundColor:[UIColor redColor]
  • 我最好的猜测是webView.frame.size没有设置得足够大。

2

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

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

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


1
我和Jessica遇到了同样的问题,我使用autoLayout。你可以帮我更改高度约束吗?这有助于解决这个问题。不需要禁用autoLayout。 - Libor Zapletal

0
要获取UIWebView内容的高度,我强烈推荐在这里'Phenomena'的答案:http://stackoverflow.com(不是被采纳的答案,而是下面的那个)。他/她建议不要使用'CGSizeZero',并提供了更好的解决方案。

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