Как я могу изменить цвет фона UIWebView после сползания UIWebView, чтобы исправить проблему оверлей на панели состояния iOS7?

Я пишу приложение Phonegap 3.0+.

Существует проблема с перекрывающимися представлениями в строке состояния в iOS7, которую пользователь Людвиг Кристофферссон предоставил здесь рабочий ответ

Теперь, когда у меня есть UIWebView с верхним краем 20px, как я могу изменить цвет фона UIWebView? Мне нужно, чтобы область, расположенная за панель состояния, была того же цвета фона, что и панель инструментов "люди".

enter image description here

У меня почти нет опыта в Objective C, и я просматривал возможные вопросы SO, чтобы найти рабочее решение, но без успеха.

Цвет фона UIWebView
Фон UIWebView установлен на Clear Color, но он не прозрачен


Ниже приведен код, который я пробовал до сих пор:

- (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];
}

Это все еще кажется мне белым фоном позади строки состояния, а не серого.

Результат, на который я надеюсь, таков: enter image description here

Ответ 1

Итак, я понял, что код подталкивает UIWebView вниз 20px. Это означает, что белым пространством по определению не может быть UIWebView. Белое пространство является основным видом, который я изменил цвет фона, выполнив следующие действия:

1. Перейдите в MainViewController.xib:



  2. Выберите основной вид:


  3. Покажите инспектор атрибутов и измените цвет. Готово.

Очевидно, теперь, когда я думаю об этом, но, надеюсь, это поможет кому-то в будущем.

Ответ 2

Измените свойство Opaque на НЕТ и проверьте следующее:

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

его работая отлично для меня.

Ответ 3

Это работает для Кордовы 3 и Кордовы 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];
 }

Ответ 4

Кордова 3.5 устанавливает цвет фона в MainViewController.m (void)webViewDidFinishLoad:(UIWebView*)theWebView:

theWebView.backgroundColor = [UIColor blackColor];

Изменение или комментирование этой строки позволило мне изменить цвет экрана iOS за веб-просмотром.

Благодаря bar54 для описания этого решения.

Ответ 5

В качестве альтернативы, установите 20px-марку в тексте HTML внутри вашего UIWebView, а затем цвет фона, установленный в вашем CSS, будет полностью зависеть.

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

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

Обратите внимание, что вашему приложению потребуется дополнительный плагин для этого устройства.

Ответ 6

Добавьте следующие определения 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");
}