Вот полное решение, совместимое с iOS 7 (хотя не совместимо с iOS 6, поскольку слишком многое изменилось)
из Apple doc ': справочник по ключам списка свойств информации':
UIViewControllerBasedStatusBarAppearance (Boolean - iOS) указывает, основан ли внешний вид строки состояния на стиле, предпочитаемом контроллером представления, который в данный момент находится под строкой состояния.Когда этот ключ отсутствует или его значение установлено в YES, контроллер представления определяет стиль строки состояния.Когда ключ имеет значение NO, контроллеры представления (или приложение) должны каждый явно устанавливать стиль строки состояния, используя объект UIApplication.Этот ключ поддерживается в iOS 7.0 и более поздних версиях.
Поэтому по умолчанию этот ключ отсутствует (= такое же поведение, как если бы вы добавляли ключ, но устанавливали его в YES): в этом случае каждое представлениеКонтроллер определяет поведение строки состояния, переопределяя некоторые методы - см. ниже.
1) Глобально показать / скрыть строку состояния всех viewControllers вашего приложения
, поэтому сначалаполный ответ на ваш вопрос, чтобы сделать единую глобальную настройку показа / скрытия для всех ваших приложений viewControllers
шаг 1: в файле frameWork-Info.plst добавьте ключ «Просмотр состояния на основе контроллера»внешний вид бара »и установите« НЕТ ».Если установить для этого ключа значение «Нет», iOS 7 не будет вызывать методы «prefersStatusBarHidden» и «lovelyStatusBarUpdateAnimation», см. Далее.
шаг 2: в настройках проекта -> общие сведения -> информация о развертывании выберите «показать»/ hide 'во время запуска приложения
вот и все: теперь вы можете глобально отображать или скрывать строку состояния, совместимую с iOS 7
2) Пусть все ваши viewControllers имеют индивидуальный контроль надстрока состояния (= iOS 7 по умолчанию)
шаг 1: не добавляйте ключ и не добавляйте его, а установите значение YES, чтобы получить поведение iOS 7 по умолчанию
шаг 2: теперь в каждом viewController вы можете определить, показывать или скрывать строку состояния, переопределив:
- (BOOL) prefersStatusBarHidden
- (UIStatusBarAnimation) предпочитаемыйStatusBarUpdateAnimation
, поэтому вам нужно переопределить эти 2 метода для управления поведением строки состояния и вернуть соответствующее значение для вашего приложения (см. Doc ref для всех возможных значений,ясно объяснил).
для управления поведением во время запуска приложения (самый первый контроллер, который показан), установите show / hide в настройках вашего проекта -> общие -> информация о развертывании
Примечаниечто iOS 7 поддерживает только один стиль оформления (UIStatusBarStyleLightContent), все остальные устарели!
Таким образом, вы можете легко включать / выключать панель, например, с помощью кнопки - настолько гибко, насколько это возможно!
например, добавьте кнопку в ваш viewController и bool @property 'isStatusBarHidden' Используйте следующий код для включения / выключения панели с анимацией.
- (BOOL)prefersStatusBarHidden
{
return self.isStatusBarHidden;
}
- (IBAction)buttonToggleStatusBar:(UIButton *)sender
{
[UIView animateWithDuration:1.0 animations:^{
self.isStatusBarHidden = !self.isStatusBarHidden;
[self setNeedsStatusBarAppearanceUpdate];
}];
}
вы можете сделать то же самое для предпочтительногоanimation
расширенное примечание: если вы хотите установить значение по умолчанию для @property 'isStatusBarHidden', вам нужно сделать это в 'initWithCoder' (вызывается при использовании раскадровок), а не в viewDidLoad.Причина в том, что prefersStatusBarHidden и предпочитаемыйStatusBarUpdateAnimation вызываются до viewDidLoad