2012-10-16 22 views
18

Voglio impostare l'altezza di UIWebview in base al contenuto HTML. Io sono sempre la dimensione di una stringa, ma non ottenere la dimensione effettiva a causa di paragrafo, grassetto, diversa dimensione del carattere, eccCome impostare l'altezza di UIWebView in base al contenuto HTML?

+1

[Che cosa hai provato?] (Http://whathaveyoutried.com) – thegrinner

+0

Webview ottenuto una pergamena, in modo da non probabilmente bisogno di questo. – alexandresoli

+0

Ho una vista Web in ogni riga in UITablView. Non sto ottenendo l'altezza della webview di ogni riga in altezzaForRowAtIndexPath. Quindi sono confuso come impostare l'altezza di ogni riga in heightForRowAtIndexPath. – KPIteng

risposta

13

Io di solito uso di questi metodi, per impostare UIWebview frame come la sua dimensione di contenuti:

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

Vengono chiamati automaticamente (se si imposta il delegato webView in questa classe), quando WebView ha terminato di caricare il suo contenuto.

+3

Perché stai andando a scorrere le visualizzazioni secondarie per trovare la vista di scorrimento? basta usare webView.scrollView. Penso inoltre che dovresti impostare i rimbalzi solo in viewDidLoad, poiché è necessario che avvenga una sola volta. (È ancora una bella risposta.) – griotspeak

+0

Grazie per il commento - buona idea :). Il codice che ho postato è molto vecchio, dal momento in cui scrollview non era accessibile direttamente. –

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

vedi anche How to determine UIWebView height based on content, within a variable height UITableView?

Calculate UIWebView height depending on its content

+2

Ma ho UIWebview in UITableView e ogni riga ha UIWebView così come calcolo perché l'altezza della tabella è impostata prima che cellForRowAtIndex abbia chiamato. – KPIteng

7

provare questo codice

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

Bene, ogni vista web ha un'UIScrollView incorporato, quindi vorrei provare aspettando la pagina per caricare e quindi toccare la proprietà contentSize della vista di scorrimento per ottenere l'altezza della pagina.

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

in questo codice cos'è height.it è una proprietà per l'altezza della vista web. –

0

Se hai WebView in tableviewcell, nel heightForRowAtIndexPath impostare l'altezza della cella per un'altezza di dimensioni NSAttributedString come segue.

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

} 
Problemi correlati