2013-01-01 49 views
8

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

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

1)请UIWebViewUIScrollView一个子视图。

2)拨打setScrollEnabled:NOUIWebView禁用其本地滚动。

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已经改变了它的大小到UIWebViewUIWebView内容的大小没有显示它的全部。我该如何解决这个问题?

请不要指教我有关苹果文档,说你不应该在UIScrollView里面使用UIWebView。我已经知道,但我想按照我的项目要求使用它。

回答

2

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

方法

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

具体建议

  • 您发布不看我的权利的 “fittingSize” 代码。该代码的目的是设置webView的框架。使用NSLog或断点来确定是否设置了Web内容的完整大小。
  • 请注意,您发布的javascript代码的用途与您发布的“fittingSize”代码相同。检查哪一个产生正确的输出。
  • 试图弄清楚webView和scrollView的帧大小以帮助您进行调试。最好的办法是设置不同的背景颜色,如下所示:setBackgroundColor:[UIColor redColor]
  • 我最好的猜测是webView.frame.size没有设置得足够大。
2

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

  1. 禁用autoLayout。
  2. 附加高度约束到web视图,改变webView的帧大小,使用后续代码之后,如:

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

+1

我和杰西卡有同样的问题,我使用autoLayout。你帮助我改变身高的限制。它有助于解决这个问题。不需要禁用autoLayout。 –

0

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