2012-12-13 32 views
5

我絕對無法調整我的UIWebViewiOS:調整UIFView後didFinishLoad(內容應適合不滾動)

我的UIWebView在.h中聲明並在IB中連接。 IB中的高度爲110,但我的文本高度大約爲1500.現在我想改變高度,以便全文可讀而不需要滾動。

什麼是代碼調整我的UIWebViewwebViewDidFinishLoad?找不到任何有效的工具。

+0

'-sizeToFit'?否則訪問'webView.scrollView.contentSize' –

+0

沒有爲我工作。你有一些代碼嗎? – filou

+2

我有同樣的問題。我得到它的唯一方法是將webview以編程方式添加到視圖中,然後修改它的框架。看來你不能修改它的框架,這只是如果它是通過IB –

回答

10

UIScrollView屬性可以用來UIWebView在IOS 5開始,您可以使用在您的代理執行webViewDidFinishLoad:消息,這樣的調整您的觀點:

-(void)webViewDidFinishLoad:(UIWebView *)webView { 
    CGRect newBounds = webView.bounds; 
    newBounds.size.height = webView.scrollView.contentSize.height; 
    webView.bounds = newBounds; 
} 
+4

有這種情況不會奏效。當UIWebview最初高於新內容大小時,它將返回以前的高度: 例如,您創建一個高度爲100px的webview,然後僅加載一行應使用例如15px的文本的html,webViewDidFinishLoad上的內容大小將爲100px而不是15px。但是,如果您的webview的高度最初爲1px,則在webViewDidFinishLoad上,內容大小將返回15px。所以爲了防止這種情況發生,請讓您的webview始終小於預期的高度。 – pablobart

+0

@pablobart我有場景,其中scrollview高度會更改後選項更改/方向更改。對此的任何修復? – neobie

3

你試過了嗎:this answer

[編輯]

有的人說這是工作:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 

// Change the height dynamically of the UIWebView to match the html content 
CGRect webViewFrame = webView.frame; 
webViewFrame.size.height = 1; 
webView.frame = webViewFrame; 
CGSize fittingSize = [webView sizeThatFits:CGSizeZero]; 
webViewFrame.size = fittingSize; 
// webViewFrame.size.width = 276; Making sure that the webView doesn't get wider than 276 px 
webView.frame = webViewFrame; 

float webViewHeight = webView.frame.size.height; 
} 

這是未經測試通過我,但70人投^這個答案和建議設置sizeTahtFits:CGSizeZero喜歡你的幀的復位.size

有的人用JavaScript來解決這個問題:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
NSString *string = [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"body\").offsetHeight;"]; 
CGFloat height = [string floatValue] + 8; 
CGRect frame = [_webView frame]; 
frame.size.height = height; 
[_webView setFrame:frame]; 

if ([[self delegate] respondsToSelector:@selector(webViewController:webViewDidResize:)]) 
{ 
    [[self delegate] webViewController:self webViewDidResize:frame.size]; 
} 
} 
+0

謝謝卡利,但內容應該動態實現。高度可能會改變。我知道沒有字體的大小是可能的。 – filou

+0

從技術上講,sizeThatFits:call應該被傳遞'CGSizeMake(maxWidth,CGFLOAT_MAX)'。 –

+0

你試過這段代碼嗎?似乎不適合我.. – filou

2

的回答約翰和Eric以上,這一塊的代碼工程。

-(void)webViewDidFinishLoad:(UIWebView *)webView { 
    CGRect newBounds = webView.bounds; 
    newBounds.size.height = webView.scrollView.contentSize.height; 
    webView.bounds = newBounds; 
} 

但同時這段代碼嘗試,我發現它返回我一個合適的WebView但出身不當, 如果多數民衆贊成對任何人的情況下,僅僅用這個代碼

webView.frame=CGRectMake(webView.frame.origin.x, webView.center.y, webView.frame.size.width, webView.frame.size.height); 

y軸重置軸被設置,你可以得到你想要的webView。

相關問題