2009-11-21 13 views
5

私はいくつかの可変サイズのコンテンツを表示するためにUIWebViewを使用しようとしています。コンテンツのサイズに完全に合わせるためにUIWebViewのサイズを変更できるように、そのコンテンツのフルサイズを決定したいと思います。なぜ[ - UIWebView sizeThatFits:]はdocument.body.offsetHeight/Widthより大きなサイズですか?

コンテンツの正確な高さと幅を特定しようとする試みは、完全に単純ではありませんでした。第一及び第二の結果は、私には理にかなっている間...

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

をサイズを見つけるための試験方法で次の試みは...

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} 

...次のログの結果を生成します - bodyのサイズはstyle属性のサイズと一致し、divのサイズは実際のコンテンツに適合します.3番目の結果は意味をなさない。実際、UIWebViewは、sizeThatFitsによって与えられた適合サイズがJavascriptのボディの高さと一致しないように、いくつかのエッジ(この場合は上、下、左)の8ピクセルで実際のHTMLコンテンツを挿入しているようです幅の結果。

誰もがこれについて説明し、これらのインセットを削除する可能性がありますか?ありがとう。

答えて

3

HTMLをこれに変更するとどうなりますか?

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

私はコンテンツ自体が適切なサイズであることを考えていますが、ビューポートや、あなたの矛盾を引き起こしているボディとの間の境界があります。ここでは、ズームスケールを定義することができ

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

:(。そして、デフォルトの周り-エッジマージンのための権利について8px音)

+0

もちろん、このような簡単な回答 - 迅速な返信に感謝します。 –

2

一つ素晴らしく、簡単な解決策は、あなたのHTMLに<head>タグを、このコードを配置することですと幅。

関連する問題