Как скрыть строку состояния в iOS 7.1?
В iOS 7.0 я спрятал строку состояния в своих приложениях, добавив
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
в info.plist. Я только что обновил тестирование iPad до iOS 7.1, и строка состояния теперь вернулась во все мои приложения. Как скрыть его как в 7.0, так и в 7.1?
Обновление: это происходит только в iPhone-приложениях, запущенных на iPad, я не вижу этой проблемы на iPhone или в симуляторе.
Ответы
Ответ 1
В контроллерах представления, в которых вы хотите, чтобы строка состояния была скрыта, добавьте следующий метод
- (BOOL)preferStatusBarHidden {
return YES;
}
Затем вы можете вызвать
[self setNeedsStatusBarAppearanceUpdate];
который запустит изменение в строке состояния. Этот вызов можно выполнить внутри блока анимации, который будет анимировать изменение.
Ответ 2
Попробуйте добавить следующие
- (void)viewWillAppear:(BOOL)animated{
NSLog(@"View will appear");
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillDisappear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
Ответ 3
Я могу воспроизвести проблему с помощью одноразового iPhone-приложения, работающего в режиме совместимости iPhone в симуляторе. Но только при выборе iPad без сетчатки на iOS 7.1.
Мои выводы:
- Строка состояния не будет скрыта, независимо от того, что вы указали в plist или в коде.
- Проблема не возникает на сетчатке iPads
- Проблема не возникает в iOS 7 или iOS 6
Я пробовал эти ключи в .plist:
<key>UIStatusBarHidden</key>
<true/>
<key>UIStatusBarHidden~ipad</key>
<true/>
и
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIViewControllerBasedStatusBarAppearance~ipad</key>
<false/>
Я также попробовал решение на основе ViewController, как упоминалось в @Irfan, безрезультатно.
Также нет способа определить, отображается ли строка состояния как [UIApplication sharedApplication].statusBarFrame возвращает {0, 0, 0, 0}
Ответ 4
Добавьте это в ViewDidLoad:
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationFade];
И выполните ниже Метод:
- (BOOL)prefersStatusBarHidden {
return YES;
}
Он скроет строку состояния этого конкретного ViewController, в котором вы его реализуете.
Он отлично работает для меня.
Надеюсь, это также поможет вам.
Ответ 5
Единственное решение, которое я нашел, это добавить следующее:
- (UIStatusBarStyle) preferredStatusBarStyle {
return -1;
}
где бы вы ни находились:
- (BOOL)prefersStatusBarHidden {
return YES;
}
Это, очевидно, ужасно, но, похоже, это работает для меня - по крайней мере, до сих пор.
UPDATE: Я заметил, что это вызывает вывод, как показано ниже:
<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.
Я нахожу другое обходное решение, и, возможно, эта ошибка является причиной того, что эта обходная работа работает, поэтому я придерживаюсь ее, но это стоит отметить.