Как скрыть строку состояния в 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.

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