7

我正在编写一个 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];
}

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

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

4

6 回答 6

14

将 Opaque 属性更改为 NO 并像这样检查:

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

它对我来说很好。

于 2013-10-17T04:06:13.173 回答
10

所以我意识到代码将 UIWebView 向下推了 20px。这意味着根据定义,空格不能是 UIWebView。空白是我通过执行以下操作更改背景颜色的主视图:

1. 转到 MainViewController.xib:



2. 选择主视图:


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

现在我考虑一下很明显,但希望这对将来的人有所帮助。

于 2013-10-17T06:40:52.230 回答
1

这适用于 Cordova 3 和 Cordova 2.9

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

 body{
   background-color: #000;
 }

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

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

  self.webView.opaque=NO;

所以你会有这样的东西:

 - (void) webViewDidStartLoad:(UIWebView*)theWebView
 {
    self.webView.opaque=NO;
    return [super webViewDidStartLoad:theWebView];
 }
于 2014-05-08T03:20:37.883 回答
1

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

theWebView.backgroundColor = [UIColor blackColor];

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

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

于 2014-09-18T20:12:12.913 回答
0

添加以下 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");
}
于 2014-08-31T01:21:01.900 回答
0

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

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

document.addEventListener('deviceready', onDeviceReady, false);

请注意,您的应用需要添加设备插件才能正常工作。

于 2013-10-17T08:29:55.677 回答