2009-11-21 12 views
5

Bazı değişken boyutlu içerikleri görüntülemek için bir UIWebView kullanmaya çalışıyorum ve bu içeriğin tam boyutunu belirlemek istiyorum, böylece UIWebView öğesini içeriğin boyutuna tam olarak uyacak şekilde yeniden boyutlandırabilirim. Bununla birlikte, içeriğin doğru yüksekliğini ve genişliğini belirleme girişimlerim henüz tam olarak anlaşılamamıştır. Birinci ve ikinci sonuç bana mantıklı olsa boyutunu bulmak için test yöntemleri aşağıdaki girişimi ...Neden - [UIWebView sizeThatFits:], document.body.offsetHeight/Width öğesinden daha büyük bir boyut veriyor?

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

... Aşağıdaki günlüğü sonuçlarını ...

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} 

üretir - beden boyutu, stil niteliğindeki boyuta eşleşir ve div boyutu gerçek içeriğe uyar - üçüncü sonuç mantıklı değildir. Gerçekten de, UIWebView gerçek HTML içeriğini bazı kenarlarda (bu durumda, üstte, altta ve solda) 8 piksel kadar yazıyor gibi görünmektedir. SizeThatFits tarafından verilen takılan boyut, Javascript gövdesi yüksekliği ile eşleşmiyor. genişlik sonucu.

Bunun için bir açıklama yapabilir ve potansiyel olarak bu bilgileri ortadan kaldırmanın bir yolu olabilir mi? Teşekkürler.

cevap

3

HTML'nizi buna göre değiştirirseniz ne olur?

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

Ben içeriğin kendisi doğru boyutta olduğunu düşünüyorum, ama viewport ve tutarsızlık neden olan vücut arasındaki bir sınır var. Burada yakınlaştırma ölçekleri tanımlayabilirsiniz

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

: (. Ayrıca varsayılan gece-kenar marjı sağ hakkında 8px ses)

+0

Elbette, bu kadar basit bir cevap - hızlı cevap için teşekkürler. –

2

Bir güzel ve basit çözüm HTML <head> etiketi bu kodu koymaktır ve genişlikler.