Строка состояния, видимая на iPad mini, несмотря на то, что UIViewControllerBasedStatusBarAppearance не имеет значения NO

У меня есть приложение для iPhone с UIViewControllerBasedStatusBarAppearance, установленным в NO. Не на каком-либо устройстве, которое я тестировал (iPhone 4, 5, 5s, 5c, iPad 4ish), отображается строка состояния. Кроме iPad mini (1-го поколения). Использование iOS SDK - 7.1.

Строка состояния видна на iPad mini 1st gen. Я ожидаю, что строка состояния также будет скрыта в этой настройке.

Я даже попытался добавить [[UIApplication sharedApplication] setStatusBarHidden:NO]; в didFinishLaunchingWithOptions, но ничего не меняя.

Строка состояния также настроена на "Скрыть во время запуска приложения".

iPad mini работает с iOS 7.1.

Да, это краевой случай, но на этот раз я просто не могу заставить его придумать ожидаемые результаты.

Еще один бит информации: я использую cocos2d-iphone v2.1. Никогда не сталкивался с этой проблемой, так как я выпустил кучу приложений с тем же движком. Я начинаю думать, что это ошибка, связанная с комбинацией: iOS 7.1 и iPad mini.

Это настройка:

Plist setup looks like this

Ответ 1

Это ошибка в iPad Mini iOS версии 7.1.

В типичном режиме они исправили одну проблему (пустую строку состояния) и создали другую.

Обязательно сообщите об ошибке Apple.

Ответ 2

У меня была та же проблема, и я хочу привести некоторые объяснения.

Проблема возникает только при запуске приложения iPhone (только) на iPad. Если приложение является универсальным, проблем не будет. Наиболее раздражающее поведение происходит с использованием приложения iPhone только для iPad без дисплея Retina. Поскольку строка состояния отменяет верхнюю часть приложения.


Мой файл plist:

enter image description here


Приложение для iPhone только

iPhone

enter image description here

IPad:

enter image description here

iPad Retina:

enter image description here


Универсальное приложение

iPhone:

enter image description here

IPad:

enter image description here

iPad Retina:

enter image description here

Ответ 3

Просто добавление к ответу Giebler, так как у меня недостаточно репутации для комментариев, эта ошибка, похоже, также относится к устройствам не Retina, работающим под управлением iOS 7.x, включая iPad 2.

Ответ 4

Вы должны установить "Просмотр строки состояния на основе контроллера" YES и в каждом представлении, которое вы хотите скрыть, вызовите этот метод. Лучше создайте контроллер базового представления для всех видов и вызовите его один раз.

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Ответ 5

<key>UIStatusBarHidden</key>
    <true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>

Попробуйте установить это в свой файл info.plist.

Ответ 6

У меня есть обходное решение. Добавьте следующее:

- (UIStatusBarStyle) preferredStatusBarStyle {
    return -1;
}

где бы вы ни находились:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Это, очевидно, ужасно, но, похоже, это работает для меня - по крайней мере, до сих пор.

Я заметил, что это вызывает вывод следующим образом:

<Error>: CGContextRestoreGState: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context  and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.

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