在向下滑动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"); }