2013-08-21 58 views
7

我動態設置UIWebView的高度時遇到問題。 webview加載一個包含html的產品描述。我希望UIWebView根據說明的內容更改其高度。父滾動視圖也應該改變它的高度,但是然後基於UIWebView的高度。帶自動佈局的UIWebView的動態高度

任何人都可以向我解釋我如何才能達到我的意見所需的行爲?

這是我的看法層次:

enter image description here

+0

可能的重複http://stackoverflow.com/questions/10715524/calculate-uiwebview-height-depending-on-its-content ??? –

+0

檢查我的答案 – AJ112

+0

[如何確定UIWebView的內容大小?](http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebview ) – Fattie

回答

0

您可以設置您的WebView和變化動態,一旦你從響應計算高度恆定的高度約束。

一個子視圖和父視圖之間也約束可以通過這種方法在NSLayoutConstraint

+ (id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c 
+0

我對webview有一個恆定的高度限制,我如何以及在哪裏可以改變高度?是在webviewdidfinishload方法中? – ruhu

5

實現其實我最近有同樣的問題,並最終計算出來,並在github上組建一個sample project

+0

爲了記錄,我對此進行了高低搜索,並且您的項目是獲得所有自動佈局約束的最佳幫助。 – tng

8

您必須在名爲webViewDidFinishLoad的UIWebView的委託方法中添加一些代碼。這裏是你可以做什麼:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    CGRect oldBounds = [[self webView] bounds]; 
    CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue]; 
    NSLog(@"NEW HEIGHT %f", height); 
    [webView setBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, oldBounds.size.width, height)]; 
    yourScrollView.contentSize = webView.bounds.size; 
} 

希望它能幫助:還可以使用JavaScript來找到合適的高度是如下實現

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
     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); 

     yourScrollView.contentSize = webView.bounds.size; 
} 

同樣的事情!

+1

由於[此答案](http://stackoverflow.com/a/3937599/80425) –

+0

但非常不準確。我得到內容切斷 –

+0

要獲得準確的結果,請將contentSize的observer用於webView.scrollView – Rajesh73