2009-11-21 7 views
5

Sto tentando di utilizzare un UIWebView per visualizzare alcuni contenuti di dimensioni variabili e mi piacerebbe determinare l'intera dimensione di quel contenuto in modo da poter ridimensionare UIWebView in modo che si adatti perfettamente alle dimensioni del contenuto.Perché - [UIWebView sizeThatFits:] fornisce una dimensione maggiore rispetto a document.body.offsetHeight/Width?

I miei tentativi di determinare l'altezza e la larghezza corrette del contenuto, tuttavia, non sono stati completamente semplici. Il seguente tentativo di metodi di prova per la determinazione della dimensione ...

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.webView.backgroundColor = [UIColor clearColor]; 

    NSString *content = @"<html><body style='background-color: transparent; width: 300px; height: 500px'><div id='ContentDiv'>Content Here</div></body></html>"; 
    [self.webView loadHTMLString:content baseURL:nil]; 

    debugLog(@"Loading HTML string: %@", content); 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSString *bodyHeight = [self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"]; 
    NSString *bodyWidth = [self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetWidth"]; 
    NSString *contentHeight = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('ContentDiv').offsetHeight"]; 
    NSString *contentWidth = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('ContentDiv').offsetWidth"]; 

    CGSize fittedSize = [self.webView sizeThatFits:CGSizeZero]; 

    debugLog(@"document.body.offsetHeight/Width: {%@, %@}", bodyWidth, bodyHeight); 
    debugLog(@"document.getElementbyId('ContentDiv').offsetHeight/Width: {%@, %@}", contentWidth, contentHeight); 
    debugLog(@"sizeThatFits: %@", NSStringFromCGSize(fittedSize)); 

    self.webView.frame = CGRectMake(0, 
            0, 
            [contentWidth floatValue], 
            [contentHeight floatValue]); 
} 

... produce i seguenti risultati del registro ...

Loading HTML string: <html><body style='background-color: transparent; width: 300px; height: 500px'><div id='ContentDiv'>Content Here</div></body></html> 
document.body.offsetHeight/Width: {300, 500} 
document.getElementbyId('ContentDiv').offsetHeight/Width: {300, 20} 
sizeThatFits: {308, 516} 

Mentre il primo e secondo i risultati hanno senso per me - il la dimensione del corpo corrisponde alla dimensione dell'attributo style e la dimensione div corrisponde al contenuto effettivo: il terzo risultato non ha senso. Infatti, UIWebView sembra inserire il contenuto HTML effettivo di 8 pixel su alcuni bordi (in alto, in basso ea sinistra in questo caso, sembra) tale che la dimensione adattata data da sizeThatFits: non corrisponde all'altezza del corpo di Javascript/risultato della larghezza.

Qualcuno può dare una spiegazione per questo e potenzialmente un modo per eliminare questi inserimenti? Grazie.

risposta

3

Cosa succede se si modifica il codice HTML a questo?

NSString *content = @"<html><body style='background-color: transparent; width: 300px; height: 500px; margin: 0; padding: 0;'><div id='ContentDiv'>Content Here</div></body></html>"; 

Sto pensando che il contenuto stesso è la dimensione giusta, ma c'è un confine tra la finestra e il corpo che sta causando il vostro discrepanza. (. E 8px suono sulla destra per il giro del bordo margine predefinito)

+0

Ovviamente, una risposta così semplice - grazie per la pronta risposta. –

2

Una piacevole e semplice soluzione è quella di inserire questo codice sul tuo HTML <head> tag:

<meta name="viewport" content="width=device-width,minimum-scale=1.0, maximum-scale=1.0" /> 

Qui è possibile definire scale di zoom e larghezze

Problemi correlati