2012-10-29 14 views
22

Ho un uiwebview che carica i dati utilizzando la funzione loadHtmlString. Il fatto è che sto caricando i dati da un database sqlite, ogni volta che carico una stringa diversa con lunghezza diversa e naturalmente la vista Web ottiene un'altezza diversa .
Ora ho bisogno di conoscere ogni volta l'altezza esatta di uiwebview per caricare un imageView direttamente sotto il webView. Ho provatoOttiene l'altezza del contenuto di UIWebView

- (void)webViewDidFinishLoad:(UIWebView *)aWebView { 
    CGRect frame = aWebView.frame; 
    frame.size.height = 1; 
    aWebView.frame = frame; 

    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero]; 
    frame.size = fittingSize; 
    aWebView.frame = frame; 

    NSLog(@"Size: %f, %f", fittingSize.width, fittingSize.height); 
} 

ma ho sempre ottenere lo stesso risultato. Devo sapere come posso ottenere dinamicamente l'altezza della visualizzazione Web ogni volta che viene caricata. Thx

risposta

-3

Questo non era l'approccio giusto per gestire questa situazione; invece di caricare l'immagine in una vista immagine e dover tenere sempre a mente l'altezza e la larghezza e tutte quelle cose ... La soluzione più semplice e affidabile era solo per caricare l'immagine all'interno della stringa html e il gioco è fatto! Basta essere sicuri di baseURL in questo modo e tutto andrà bene indipendentemente dall'orientamento che si prende:

NSString* extension = @"gif"; 
    NSString* strRR = [NSString stringWithFormat:@"%@.%@", authorNAme2,extension]; 
    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    //NSLog(@"This is the path %@", path); 
    NSURL *baseURL = [NSURL fileURLWithPath:path]; 
    // NSLog(@"this is the base URL %@",baseURL); 

    NSString *cachePath = [NSString stringWithFormat:@"%@/%@", path,strRR]; 

      NSString * htmlString = [NSString stringWithFormat:@"\ 
            <html>\ 
            <table width='100%%'>\<tr>\<td>\ 
            <body>\ 
            <p style = 'font-size:30px;'> %@ <\p>\ 
            </td></tr><tr><td><br></td></tr><tr><td align ='center'><br><img src='%@' width='60%%' \></td></tr></body>\ 
            </table>\ 
            </html>",authorNAme , cachePath]; 



      //   NSString *selection = [WebV2 stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString()"]; 
      //   NSLog(@"*/*/*/*/**/*/*/*/*/*/*//*/ This is your selection mate %@" , selection); 




      WebV.opaque = NO; 
      WebV.backgroundColor = [UIColor clearColor]; 
      [self.WebV setScalesPageToFit:YES]; 
      [self.WebV loadHTMLString:htmlString baseURL:baseURL]; 
29

È possibile ottenere l'altezza del contenuto di una visualizzazione Web accedendo proprietà scrollView della visualizzazione Web:

NSLog(@"%f",myWebView.scrollView.contentSize.height); 
+1

Meglio dell'isolamento JS. +1 anche per te. –

+6

L'ho provato ma lo stesso numero continua ad andare avanti ... anche se ho un paragrafo di 2 parole ottengo 737 quindi non ha funzionato: S –

+0

@EliasRahme Puoi spiegare meglio cosa stai cercando di ottenere qui. Il codice che ho elencato sopra * è * come si tiene traccia delle dimensioni del contenuto in una visualizzazione Web. –

45

Prova questa

NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"]; 

int height = [result integerValue]; 

nel metodo webViewDidFinishLoad.

+0

Stavo per suggerire questo. +1. –

+0

E come otterrò il risultato in una variabile? Non vedo il risultato del tuo suggerimento come posso gestirlo? Sono nuovo grazie per aver capito –

+2

@EliasRahme Ottieni il risultato nella stringa restituita: 'NSString * result = [webView stringByEvaluatingJavaScriptFromString: @" document.body.offsetHeight; "];' Per convertire la stringa 'result' in un int tu può usare: 'int height = [result integerValue];' –