Как я могу изменить цвет фона 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");
}