功能要求:使用wkwebview加载网页,,夜间模式下修改网页背景颜色和字体的颜色
遇到的问题:网页在加载完毕,,修改背景颜色的时候会先闪现一下白色背景后变成夜间的颜色
原因:网页的背景色和字体颜色的修改是在网页加载完毕的时候进行的,,所以会先显示原始颜色,再显示修改的颜色
夜间模式的实现方法::
- (void)nightOrDay{
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"nightOrDay"] isEqualToString:@"1"]) {
self.view.backgroundColor = viewNightColor;
// 改变网页内容背景颜色
[self.newsWebView evaluateJavaScript:@"document.body.style.backgroundColor=\"#28333C\"" completionHandler:nil];
// 改变网页内容文字颜色
[self.newsWebView evaluateJavaScript:@"document.body.style.webkitTextFillColor=\"#7E9EB3\"" completionHandler:nil];
}else{
self.view.backgroundColor = [UIColor whiteColor];
}
}
闪白的解决方法::
#pragma mark 网页开始加载 隐藏网页
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
self.newsWebView.hidden = YES;
}
#pragma mark 网页加载完成 延时0.2秒展示网页,,此时夜间模式的颜色已经修改完毕,,不会看到闪白了
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
[self nightOrDay];
/// 延时0.2s 显示网页
[self performSelector:@selector(showWebView) withObject:self afterDelay:0.2];
}
- (void)showWebView{
self.newsWebView.hidden = NO;
[SVProgressHUD dismiss];
}
如果你有更好的方法,,欢迎留言探讨