我制作了一种使用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];
大多数时候这个作品都能找到,我得到了我期望的结果。但有时它看起来像这样:
UIWebView中设置的边距应为黑色时保持白色,或者应为白色时保持黑色。这似乎是随机的!特别是因为它不是在整个网页上,而是从1024px开始(确切地说,是iPad屏幕的高度)。
有没有人知道如何解决这个问题?
它既可以在模拟器中也可以在真正的iPad上使用。
答案 0 :(得分:0)
(假设这是我的HTML内容)。您正在从UIWebView
的外部处理此问题,我认为您需要将反转逻辑注入 Web视图。我建议你注入反转内容的CSS(如here所述)。你的缺点是,如果你还不知道CSS,你必须至少学习一些CSS,并且反转并不容易。但是,由于难以控制WebKit中的实现细节(在将来的版本中也存在很大的改变风险),因此可能很难找到问题的边缘情况。 / p>
答案 1 :(得分: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];
}
}