раскадровка iOS - отключите строку состояния на раскадровке один раз - PullRequest
12 голосов
/ 23 января 2012

Есть ли способ в Xcode при использовании Storyboard в Interface Builder для полного отключения строки состояния, чтобы при создании новой View Controller мне не приходилось поворачивать строку состояния "от предполагаемого к ничему.

Ответы [ 2 ]

24 голосов
/ 15 декабря 2013

Вот полное решение, совместимое с 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

12 голосов
/ 23 января 2012

Вы уже проверили, работает ли настройка UIStatusBarHidden на YES в вашем Info.plist? Смотрите документацию: http://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW15

Это скрывает строку состояния при запуске приложения.

...