2009-11-21 30 views
5

Tôi đang cố gắng sử dụng UIWebView để hiển thị một số nội dung có kích thước biến và tôi muốn xác định kích thước đầy đủ của nội dung đó để tôi có thể thay đổi kích thước UIWebView để vừa với kích thước của nội dung một cách hoàn hảo.Tại sao - [UIWebView sizeThatFits:] cho kích thước lớn hơn document.body.offsetHeight/Width?

Tuy nhiên, nỗ lực xác định chiều cao và chiều rộng của nội dung chính xác không hoàn toàn đơn giản. Nỗ lực sau các phương pháp thử nghiệm cho việc tìm kiếm kích thước ...

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

... tạo ra các kết quả ghi sau đây ...

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} 

Trong khi kết quả đầu tiên và thứ hai có ý nghĩa với tôi - kích thước nội dung phù hợp với kích thước trong thuộc tính kiểu và kích thước div phù hợp với nội dung thực tế - kết quả thứ ba không có ý nghĩa. Thật vậy, UIWebView dường như chèn nội dung HTML thực tế lên 8 pixel trên một số cạnh (trên cùng, dưới cùng và bên trái trong trường hợp này) dường như kích thước được trang bị bởi sizeThatFits: không khớp với chiều cao thân của Javascript/chiều rộng kết quả.

Bất kỳ ai có thể giải thích về điều này và có khả năng là cách để loại bỏ các loại thiết bị này? Cảm ơn.

Trả lời

3

Điều gì sẽ xảy ra nếu bạn thay đổi HTML của mình thành điều này?

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

Tôi nghĩ rằng nội dung chính nó là đúng kích cỡ, nhưng có ranh giới giữa chế độ xem và cơ thể gây ra sự khác biệt của bạn. (. Và 8px đúng đắn về phù hợp với mặc định xung quanh-the-cạnh lề)

+0

Tất nhiên, một câu trả lời đơn giản như vậy - cảm ơn câu trả lời nhanh chóng. –

2

Một ngơi và giải pháp đơn giản là đặt mã này vào HTML của bạn <head> tag:

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

đây bạn có thể xác định quy mô zoom và chiều rộng.

Các vấn đề liên quan