2012-10-16 26 views
18

Tôi muốn đặt chiều cao của UIWebview dựa trên nội dung HTML. Tôi nhận được kích thước của một chuỗi, nhưng không nhận được kích thước thực tế do đoạn, đậm, khác nhau kích thước font chữ, vvCách đặt chiều cao UIWebView dựa trên nội dung html?

+1

[Bạn đã thử gì?] (Http://whathaveyoutried.com) – thegrinner

+0

Chế độ xem web có một cuộn, vì vậy bạn có thể không cần điều đó. – alexandresoli

+0

Tôi có chế độ xem web trong mỗi hàng trong UITablView. Tôi không nhận được chiều cao xem web của mỗi hàng tại heightForRowAtIndexPath. Vì vậy, tôi nhầm lẫn làm thế nào để thiết lập Mỗi chiều cao hàng trong heightForRowAtIndexPath. – KPIteng

Trả lời

13

Tôi thường sử dụng phương pháp này, để thiết lập UIWebview khung như đó là kích thước nội dung:

- (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]; 
     } 
    } 
} 

Chúng được gọi tự động (nếu bạn đặt đại biểu của webView cho lớp này), khi WebView đã tải xong nội dung của nó.

+3

Tại sao bạn lặp lại qua các bản xem trước để tìm chế độ xem cuộn? chỉ cần sử dụng webView.scrollView. Tôi cũng nghĩ rằng bạn chỉ nên đặt thư bị trả lại trong viewDidLoad vì nó chỉ cần xảy ra một lần. (Nó vẫn là một câu trả lời tốt.) – griotspeak

+0

Cảm ơn nhận xét - ý tưởng hay :). Mã tôi đã đăng thực sự cũ, từ thời điểm scrollview không thể truy cập trực tiếp. –

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); 
} 

cũng thấy How to determine UIWebView height based on content, within a variable height UITableView?

Calculate UIWebView height depending on its content

+2

Nhưng tôi có UIWebview trong UITableView và mỗi hàng có UIWebView vì vậy làm thế nào tôi tính toán vì chiều cao bảng thiết lập trước khi cellForRowAtIndex gọi. – KPIteng

7

Hãy thử mã này

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

Vâng, mỗi xem web có một UIScrollView xây dựng vào nó, vì vậy tôi sẽ cố gắng chờ đợi cho các trang để tải và sau đó chạm vào contentSize của chế độ xem của cuộn để có chiều cao của trang.

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

trong mã này chiều cao là gì. Bất kỳ thuộc tính nào cho chiều cao xem web. –

0

Nếu bạn có webview trong tableviewcell, trong heightForRowAtIndexPath thiết lập chiều cao của tế bào để chiều cao của kích thước NSAttributedString như sau.

-(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; 

} 
Các vấn đề liên quan