在向下滑动UIWebView以修复iOS7状态栏覆盖问题后,如何更改UIWebView背景颜色?

我正在写一个Phonegap 3.0+应用程序。

在iOS7中状态栏重叠视图存在问题,用户Ludwig Kristoffersson在此提供了一个有效的答案

现在我的UIWebView具有20px的上边距,我该如何更改UIWebView背景颜色? 我需要状态栏后面的区域与“人物”工具栏的背景颜色相同。

在此处输入图像描述

我几乎没有Objective C的经验,并且一直在寻找可能的SO问题来找到一个有效的解决方案,但没有成功。

UIWebView背景颜色
UIWebView背景设置为“清除颜色”,但它不透明

下面是我到目前为止尝试过的代码:

- (void)viewWillAppear:(BOOL)animated { //Lower screen 20px on ios 7 if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { CGRect viewBounds = [self.webView bounds]; viewBounds.origin.y = 20; viewBounds.size.height = viewBounds.size.height - 20; self.webView.frame = viewBounds; [self.webView setOpaque:YES]; //neither of these seem to work when uncommented: // [self.webView setBackgroundColor:[UIColor grayColor]]; // self.webView.backgroundColor=[UIColor grayColor]; } [super viewWillAppear:animated]; } 


更新1

 - (void)viewWillAppear:(BOOL)animated { //Lower screen 20px on ios 7 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { CGRect viewBounds = [self.webView bounds]; viewBounds.origin.y = 20; viewBounds.size.height = viewBounds.size.height - 20; self.webView.frame = viewBounds; self.webView.backgroundColor = [UIColor grayColor]; self.webView.opaque=NO; } [super viewWillAppear:animated]; } 

这似乎仍然给我一个状态栏背后的白色背景,而不是灰色。

我希望的结果是这样的: 在此处输入图像描述

将Opaque属性更改为NO并检查如下:

 self.webView.backgroundColor = [UIColor grayColor]; self.webView.opaque=NO; 

它对我来说很好。

所以我意识到代码将UIWebView压缩了20px。 意思是定义的空白区域不能是UIWebView。 白色空间是我通过执行以下操作更改背景颜色的主视图:

1.转到MainViewController.xib:

2.选择主视图:

3.显示属性检查器并更改颜色。 完成。

现在很明显我想到了,但希望这有助于将来的某些人。

这适用于Cordova 3和Cordova 2.9

因此,在您通过CSS设置应用程序的背景颜色后,如下所示:

  body{ background-color: #000; } 

转到您的CordovaXlib.xcode.proj并查找“Classes”文件夹MainViewController.m第#142行

取消注释“webViewDidStartLoad”方法或function,然后添加

  self.webView.opaque=NO; 

所以你会有这样的事情:

  - (void) webViewDidStartLoad:(UIWebView*)theWebView { self.webView.opaque=NO; return [super webViewDidStartLoad:theWebView]; } 

Cordova 3.5在MainViewController.m(void)webViewDidFinishLoad:(UIWebView*)theWebView设置背景颜色:

 theWebView.backgroundColor = [UIColor blackColor]; 

成功更改或注释掉该行允许我更改webview后面的iOS屏幕的颜色。

感谢bar54描述这个解决方案。

或者,在UIWebView内部的HTML主体上设置20px的边距,然后CSS中的背景颜色将一直显示在顶部。

 function onDeviceReady() { if (parseFloat(window.device.version) === 7.0) { document.body.style.marginTop = "20px"; } } document.addEventListener('deviceready', onDeviceReady, false); 

请注意,您的应用需要添加设备插件才能实现此function。

添加以下CSS定义:

 #ios7statusbar { width:100%; height:20px; background-color:white; position:fixed; z-index:10000; } .ios7 .ui-page, .ios7 .ui-header, .ios7 .ui-pane { margin-top: 20px; } 

将基于JavaScript的用户代理检测添加到您的应用初始化:

 if (navigator.userAgent.match(/(iPad.*|iPhone.*|iPod.*);.*CPU.*OS 7_\d/i)) { $("body").addClass("ios7"); }