2013-12-12 28 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]; 
    } 
}