2013-12-12 30 views
3

我製作了一種使用UIWebView的閱讀器。我想包括一個夜間模式功能,它將文本白色和背景黑色,而不是白色背景上的普通黑色文本。UIWebView上的夜間模式問題

爲此,我使用下面的代碼:

if (nightMode == YES) 
{ 
    [self.view setBackgroundColor:[UIColor whiteColor]]; 
    NSString *setJavaScript = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextFillColor= 'black'; document.getElementsByTagName('html')[0].style.backgroundColor= 'white'; DOMReady();"]; 
    [readerWebView stringByEvaluatingJavaScriptFromString:setJavaScript]; 
    [readerWebView.scrollView setBackgroundColor:[UIColor whiteColor]]; 
    [[NSUserDefaults standardUserDefaults] setBool:(NO) forKey:@"nightMode"]; 
    nightMode = NO; 
} 
else 
{ 
    [self.view setBackgroundColor:[UIColor blackColor]]; 
    NSString *setJavaScript = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextFillColor= 'white'; document.getElementsByTagName('html')[0].style.backgroundColor= 'black'; DOMReady();"]; 
    [readerWebView stringByEvaluatingJavaScriptFromString:setJavaScript]; 
    //[readerWebView setBackgroundColor:[UIColor blackColor]]; // doesn't solve it 
    [readerWebView.scrollView setBackgroundColor:[UIColor blackColor]]; 
    [[NSUserDefaults standardUserDefaults] setBool:(YES) forKey:@"nightMode"]; 
    nightMode = YES; 
} 
[[NSUserDefaults standardUserDefaults] synchronize]; 

大部分的時間這個作品找到我得到的結果我的預期。但有時它看起來像這樣:

screenshot

那些在UIWebView中設置頁邊距保持白色的時候應該是黑色或黑色時,他們應該是白色的。這似乎完全是隨機的!尤其是因爲它不在整個網頁上,而是從1024px開始(正好是iPad屏幕的高度)。

有沒有人有任何線索如何解決這個問題?

它既在模擬器中,也在真實的iPad上。

+0

你有沒有打過電話[readerWebView setNeedsDisplay]? –

+0

不好意思,不幸 – Mathijs

+0

這是發生在模擬器還是實際設備?有可能是一個模擬器的錯誤...這只是一個猜測 –

回答

0

(假設我在這裏HTML內容)。你正在從UIWebView以外的這個問題,我認爲你需要注入倒轉邏輯的網絡視圖。我建議你,而不是注入反轉內容的CSS(如描述,例如here)。你的缺點是,如果你還不知道CSS,你至少需要學習一些CSS,反轉並不是那麼容易。但是最終會導致難以控制WebKit中實現細節的問題邊緣案例的數量要少得多(這也是未來版本中更改的風險),這些可能太難以發現。

+0

我不完全確定你的意思,我想我正在使用你的鏈接中描述的東西,對吧?而且我對CSS很熟悉,實際上我用DOM來改變CSS,只是它在任何地方都是隨機的,或者它不工作...... – Mathijs

0
  • 您也可以使用此代碼還可用於夜間模式&夜間模式。此代碼可能適合您的需要。
  • 這將適用於UIWebView

的代碼是:

BOOL isNightMode; 

- (IBAction)nightModeBtn_click:(id)sender { 
    isNightMode = YES; 
    [self.webView reload]; 
} 
- (IBAction)dayModeBtn_click:(id)sender { 
    isNightMode = NO; 
    [self.webView reload]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)_webView{ 
    if(isNightMode == YES){ 
    [self.webView setOpaque:NO]; 
    NSString *setJavaScript = [[NSString alloc] initWithFormat:@" document.getElementsByTagName('body')[0].style.webkitFilter='grayscale(100%%)';document.getElementsByTagName('div')[0].style.webkitFilter='grayscale(100%%)'; DOMReady();"]; 
    [self.webView stringByEvaluatingJavaScriptFromString:setJavaScript]; 
    } 
}