簡體   English   中英

iPhone-獲取UIWebView的內容大小

[英]iPhone - get the Content Size of UIWebView

我在我的UIWebView中打開本地Pdf文件,然后嘗試調整UIWebview的大小,以使WebView的高度變得等於WebView內容的高度,我正在使用這行代碼來獲取WebView內容的高度

- (float) getWebViewContentHeight:(UIWebView *)view
{


    CGRect aFrame               = view.frame;

    aFrame.size.height  = [view sizeThatFits:[[UIScreen mainScreen] bounds].size].height;
    view.frame              = aFrame;

    return view.frame.size.height;
} 

此代碼在iOS 4.3上可以正常運行,但在iOS 5.0上不能運行,請問有人可以幫助我獲取webView的內容大小或使此代碼在iOS 5上也可以運行

訪問內容有些棘手,但是在這里我將展示兩種方法。

1.丑陋的方式

使用JS查詢文檔屬性:

CGSize contentSize = CGSizeMake([[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth;"] floatValue],
                                [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"] floatValue]);

2.不太丑陋的方式

UIWebView是一個復合對象,其中包含一個內部UIScrollView 從iOS 5.0開始,您可以嘗試獲取此滾動視圖,並將其contentSize屬性直接用作webView.scrollView.contentSize 如果您需要保持與iOS 4.3及更低版本的兼容性,則必須做一些魔術才能獲得滾動視圖:

UIScrollView* webScrollView = nil;
for ( UIView* subview in [webView subviews] )
{
    if ( [subview isKindOfClass:[UIScrollView class]] )
    {
        webScrollView = (UIScrollView*)subview;
        break;
    }
}

可能會多次調用webViewDidFinishLoad方法,並且sizeThatFits返回的第一個值只是最終大小的一部分。 然后,無論出於何種原因,再次觸發webViewDidFinishLoad時對sizeThatFits的下一次調用將錯誤地返回與之前相同的值! 對於相同的內容,這將是隨機發生的,就像某種並發問題一樣。 也許這種行為隨着時間的流逝而發生了變化,因為我正在為iOS 5進行構建,並且還發現sizeToFit的工作方式幾乎相同(盡管以前沒有)

我已經解決了這個簡單的解決方案:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{        
    CGFloat height = [[aWebView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
    CGFloat width = [[aWebView stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue];
    CGRect frame = aWebView.frame;
    frame.size.height = height;
    frame.size.width = width;
    aWebView.frame = frame;
}

迅捷(2.2):

func webViewDidFinishLoad(webView:UIWebView){

if let heightString = webView.stringByEvaluatingJavaScriptFromString("document.height"),
    widthString = webView.stringByEvaluatingJavaScriptFromString("document.width"),
    height = Float(heightString),
    width = Float(widthString) {

    var rect = webView.frame
    rect.size.height = CGFloat(height)
    rect.size.width = CGFloat(width)
    webView.frame = rect
}

}

更新:我發現如評論中所述,這似乎並沒有解決內容縮小的問題。 不確定所有內容和操作系統版本是否正確,請嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM