2013-10-22 65 views
2

呈現所有圖片我目前正在開發的OS X應用程序,與OS X 10.6向後兼容。在某些時候,我創建了一個WebView,在該WebView中加載我動態創建的html內容。 HTML內容只有形成的圖像鏈接<img src=和文字,沒有JavaScript或那樣的事情。所有的圖像(只有5個PNG圖像)存儲在本地,其大小爲4 KB。可可的WebView不會對OSX 10.8

我遇到的問題是一些圖像(那些不在「滾動」的可見側),第一次運行應用程序時,圖像不會顯示,除非我將窗口拖動到另一個屏幕或再次加載包含WebView的視圖控制器。在這些情況下,即使圖像不在現場,圖像也會顯示在「滾動」上。我曾嘗試使用NSURLCache加載每個圖像,以便WebView將更容易訪問它們...我已經嘗試使用IB和編程方式創建WebView,我已經使用Web自動保存,AllowsAnimatedImages ...相同的結果。

考慮到我的代碼是相當廣泛的我要交的只是我認爲相關的位:

NSString *finalHtml ... //contains the complete html 


CGRect screenRect = [self.fixedView bounds]; 
CGRect webFrame = CGRectMake(0.0f, 0.0f, screenRect.size.width, screenRect.size.height); 

self.miwebView=[[WebView alloc] initWithFrame:webFrame]; 
[self.miwebView setEditable:NO]; 
[self.miwebView setUIDelegate:self]; 
[self.miwebView setResourceLoadDelegate:self]; 
[self.miwebView setFrameLoadDelegate:self]; 

WebPreferences *webPref = [[WebPreferences alloc]init]; 
[webPref setAutosaves:YES]; 
[webPref setAllowsAnimatedImages:YES]; 
[webPref setAllowsAnimatedImageLooping:YES]; 
[self.miwebView setPreferences:webPref]; 


    ... 

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 
                     diskCapacity:20 * 1024 * 1024 
                      diskPath:nil]; 
[NSURLCache setSharedURLCache:URLCache]; 
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"line" ofType:@"png"]; 
NSURL *resourceUrl = [NSURL URLWithString:imagePath]; 
NSURLRequest *request = [NSURLRequest requestWithURL:resourceUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0f];   
[URLCache cachedResponseForRequest:request]; 

     ... 

NSString *pathResult = [[NSBundle mainBundle] bundlePath]; 
NSURL *baseURLRes = [NSURL fileURLWithPath:pathResult]; 

[[self.miwebView mainFrame] loadHTMLString:finalHtml baseURL:baseURLRes]; 
[self.fixedView addSubview:self.miwebView]; 

我還要提到的是如果圖像捕捉某處在可見光之間在「滾動」只圖像的可見位會即使頁面獲取滾動起來要呈現的不可見的側面......所以我覺得這一切都是一些渲染問題...

我感謝你的幫助, 謝謝!

+0

我必須補充一點,這個問題是不存在於OS X 10.7它發生僅在10.8 – Artur

回答

0

好的人,我發現了什麼問題了。事情是webview內容被渲染在webview框架內,但框架比文檔小。 didFinishLoadForFrame:所以我通過添加下面的一段代碼到網頁視圖解決了這個問題

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame 
{ 
    //Get the rect for the rendered frame 
    NSRect webFrameRect = [[[[miwebView mainFrame] frameView] documentView] frame]; 
    //Get the rect of the current webview 
    NSRect webViewRect = [miwebView frame]; 
    //Calculate the new frame 
    NSRect newWebViewRect = NSMakeRect(webViewRect.origin.x, 
              webViewRect.origin.y - (NSHeight(webFrameRect) - NSHeight(webViewRect)), 
              NSWidth(webViewRect), 
              NSHeight(webFrameRect)); 

    [miwebView setFrame:newWebViewRect]; 
    [miwebView setFrame:webViewRect]; 
    [[[miwebView mainFrame] frameView] setAllowsScrolling:YES]; 
}