2012-10-16 95 views
18

我想根據HTML內容設置UIWebview的高度。我得到一個字符串的大小,但沒有得到實際的尺寸,因爲段落,粗體,不同的字體大小等如何根據html內容設置UIWebView的高度?

+1

[你有什麼嘗試?](http://whathaveyoutried.com) – thegrinner

+0

Webview有一個滾動,所以你可能不需要。 – alexandresoli

+0

我在UITablView的每一行都有webview。我沒有在heightForRowAtIndexPath中獲取每行的webview高度。所以我很困惑如何在heightForRowAtIndexPath中設置每行高度。 – KPIteng

回答

13

我通常使用這些方法,設置UIWebview框架,因爲它的內容大小:

- (void)webViewDidStartLoad:(UIWebView *)webView { 
    CGRect frame = webView.frame; 
    frame.size.height = 5.0f; 
    webView.frame = frame; 
} 

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

    //Disable bouncing in webview 
    for (id subview in webView.subviews) { 
     if ([[subview class] isSubclassOfClass: [UIScrollView class]]) { 
      [subview setBounces:NO]; 
     } 
    } 
} 

WebView完成加載它的內容時,它們被自動調用(如果您將webView的代理設置爲此類)。

+3

你爲什麼遍歷子視圖來查找滾動視圖?只需使用webView.scrollView。我也認爲你只應該在viewDidLoad中設置反彈,因爲它只需要發生一次。 (這仍然是一個很好的答案。) – griotspeak

+0

感謝您的評論 - 好主意:)。我發佈的代碼真的很老,從滾動視圖無法直接訪問的時候開始。 –

1
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    webview.delegate = self; 
    [webview loadHTMLString:@"<div id='foo' style='background: red'>The quick brown fox jumped over the lazy dog.</div>" baseURL:nil]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *output = [webview stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"foo\").offsetHeight;"]; 
    NSLog(@"height: %@", output); 
} 

又見How to determine UIWebView height based on content, within a variable height UITableView?

Calculate UIWebView height depending on its content

+2

但我有UIWebview在UITableView&每一行都有UIWebView所以我如何計算,因爲表格高度設置之前調用cellForRowAtIndex。 – KPIteng

7

試試這個代碼

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{  
    height= [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue]; 
} 
9

那麼,每一個網站觀點有把它建成一個UIScrollView,所以我會嘗試等待頁面加載,然後點擊滾動視圖的contentSize屬性來獲取頁面的高度。

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    CGFloat height = webView.scrollView.contentSize.height; 
} 
+0

在這段代碼什麼是height.it是web視圖高度的任何屬性。 –

0

如果你有tableviewcell web視圖,在heightForRowAtIndexPath設置單元格的高度NSAttributedString大小的高度以下。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 


    NSAttributedString *attributedText = [NSString getHTMLAttributedString:@"HTML Content"]; 
    CGSize size = CGSizeMake(300, CGFLOAT_MAX); 
    CGRect paragraphRect =  [attributedText boundingRectWithSize:size 
           options:(NSStringDrawingUsesLineFragmentOrigin) 
           context:nil]; 
    return paragraphRect.size.height; 
} 

+(NSAttributedString *) getHTMLAttributedString:(NSString *) string{ 
    NSError *errorFees=nil; 
    NSString *sourceFees = [NSString stringWithFormat: 
          @"<span style=\"font-family: 'Roboto-Light';font-size: 14px\">%@</span>",string]; 
    NSMutableAttributedString* strFees = [[NSMutableAttributedString alloc] initWithData:[sourceFees dataUsingEncoding:NSUTF8StringEncoding] 
                       options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
                          NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} 
                     documentAttributes:nil error:&errorFees]; 
    return strFees; 

} 
相關問題