2013-01-01 45 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',並給出了更好的解決方案。