2010-06-04 15 views
9

我試圖使用UIWebView來顯示高於iPhone屏幕的內容,而無需滾動UIWebView本身。UIWebView - 自動調整大小,以便不需要滾動(在webView本身中)

UIWebView與的UIWebView放在作爲一個子視圖到UIScrollView,與我想要的UIScrollView滾動了一些其他的目的和向下

我知道你可以用UITextView這樣做:

CGRect frame = _textView.frame; frame.size.height = _textView.contentSize.height; _textView.frame = frame; 

UIWebView不會UIScrollView繼承。它不是包含contentSize - 屬性。

我真的想保持它UIWebView,因爲我得到的數據是在HTML塊。

謝謝!

回答

7

我認爲你能夠做到這一點的唯一方法是使用JavaScript來讓網頁的大小和調整的UIWebView控件的大小。

類似下面應該做的伎倆

int content_height = [[theWebView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue]; 
CGRect rect = theWebView.frame; 
rect.size.height = content_height; 
theWebView.frame = rect; 

您可能需要某種形式的修正因子的添加到內容的高度。

+0

不,這似乎只隱藏UIWebView的..好主意,但。 – Emil 2010-06-05 08:50:02

+0

content_height = 0 – Emil 2010-06-05 08:51:53

+4

您可能需要等到一個UIWebView已經完成加載您的內容之前,上面的代碼將會給你想要的東西。我在一些網絡應用程序中成功地使用了上述代碼的變體來調整嵌入式IFRAME標記的大小。 – Daniel 2010-06-05 22:52:38

14

其實,不需要使用Javascript! 在UIView的存在是一個很好的方法:

- (CGSize)sizeThatFits:(CGSize)size 

你傳遞什麼(這裏沒有太大意義),它返回它想成爲的大小,使用其內容(子視圖等)來計算尺寸。

當然,因爲在異步一個UIWebView內容加載,你應該在網頁視圖後,做到這一點已經加載,例如在UIWebViewDelegate方法:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    CGSize size = [webView sizeThatFits: CGSizeMake(1.0f, 1.0f)]; // Pass about any size 
    CGRect frame = webView.frame; 
    frame.size.height = size.height; 
    webView.frame = frame; 
} 

的Et瞧!

+0

我不知道爲什麼,但沒有奏效。抱歉。 – Emil 2010-09-20 16:11:48

+0

規格:這樣做的工作,但不是當webView包含圖像,可能是因爲這些沒有完全加載的時間。 – Emil 2010-09-20 16:26:43

+1

啊......所以UIWebView在加載基本HTML時通知,而不是整個頁面。無論如何,如果你的圖片改變你的佈局,你的頁面不符合W3C標準(應包含img標籤中的大小):p – jv42 2010-09-21 08:48:57