SetStatusBarHidden устарел, но работает только то, что работает

Я пробовал все решения, которые я могу найти, в том числе: setStatusBarHidden устарел в iOS 9.0, но никто из них не работает с моим приложением.

Это простое приложение с одним представлением. Существует панель навигации с одной кнопкой, на которой должна отображаться строка состояния сверху.

В моем .plist:

Строка состояния изначально скрыта: NO

Стиль строки состояния: UIStatusBarStyleLightContent

Просмотр вида строки состояния на основе контроллера: NO

Изменение любого из них, похоже, не имеет никакого значения. У меня установлен стиль строки "Скрыть во время запуска приложения", так как я не хочу, чтобы он отображался на заставке.

У меня есть:

- (BOOL)prefersStatusBarHidden 
{
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle
{
    NSLog(@"style");
    return UIStatusBarStyleLightContent;
}

и setNeedsStatusBarAppearanceUpdate, которые определенно вызываются, когда просмотр загружается в моем ViewController.

Вид создается в .storyboard, но многие поля также обрабатываются в ViewController.m. Значение, присвоенное строке состояния в имитируемых метриках, также не имеет никакого эффекта.

Мне нужно, чтобы моя строка состояния была скрыта во время запуска экрана и видна на viewController. Пожалуйста, помогите мне найти решение, которое не использует устаревший setStatusbarHidden!

EDIT:

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

Ответ 1

Я только пытался решить ту же проблему, я не знаю, почему setStatusBarHidden и setStatusBarStyle устарели, поскольку новые методы не являются интуитивными.

Чтобы скрыть строку состояния при запуске, у меня есть эти настройки в моем plist:

View controller-based status bar appearance: YES
Status bar is initially hidden: YES

Затем, чтобы показать строку состояния после запуска, у меня есть на моем контроллере:

- (BOOL)prefersStatusBarHidden {    
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

Это все еще не сработало, пока я не нашел этот ответ fooobar.com/questions/22493/.... Поэтому в viewDidLoad я также установил стиль панели навигации:

self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

Что совершенно не имеет смысла, но работает.

Ответ 2

вы можете использовать

application.statusBarHidden=YES; 

в AppDelegate.m

didFinishLaunchingWithOptions

Ответ 3

На мой взгляд, вы должны изменить значение UIViewControllerBasedStatusBarAppearance.

Установить файл значения .plist проекта a

UIViewControllerBasedStatusBarAppearance = NO

и проверьте файл AppDelegate и установите код

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Надеюсь, что мое решение может решить вашу проблему.

Ответ 4

Хорошо, я совершенно неправильно понял ваш вопрос. Вот правильный ответ.

Добавьте значение ниже в info.plist.

Status bar is initially hidden : YES
View Controller based status bar appearance : YES

Вкл UIViewController, который вы хотите отобразить в строке состояния

- (BOOL)prefersStatusBarHidden {
    return NO;
}

Что все.

Ответ 5

Я не эксперт в этом, но некоторое время играл с этими настройками и пришел к следующим выводам.

Общая информация/информация о развертывании: Строка состояния: по умолчанию (черный), свет Скрыть строку состояния (флажок) Оба изменяют строку состояния только на экране запуска. Обратите внимание, что если вы сделаете снимок экрана, чтобы создать это изображение, а экранный снимок включил строку состояния, появится, что устройство устанавливает строку состояния, даже если вы установили флажок "Скрыть панель состояния"! Некоторое время я обманывал это, прежде чем я, наконец, подумал о том, чтобы посмотреть изображение запуска, и на фотографии была строка состояния, поэтому настройка Hide никогда не работала, даже несмотря на то, что она действительно работала. Я удалил строку состояния из самих изображений с помощью Photoshop, и после этого строки состояния запуска функционировали как ожидалось.

Info/Пользовательские свойства целевого объекта iOS (они изменяют значения в PLIST, поэтому вы можете изменить их в любом месте): Строка состояния сначала скрыта: Да/Нет Строка состояния Стиль: серый (по умолчанию), прозрачный черный, непрозрачный черный Просмотр состояния панели состояния на основе контроллера: Да/Нет Если вы установили, что строка состояния по умолчанию скрыта на "Нет", тогда у вас будет строка состояния на вашем контроллере просмотра, как вы хотели. Если вы хотите скрыть строку состояния на вашем контроллере просмотра, вам необходимо установить строку состояния Is Initially Hidden на Yes и установить вид Status Bar на панели управления View No.

Инспектор атрибутов для контроллера View/Simulated Metrics Строка состояния: нет, выводится, по умолчанию, свет, черный (устаревший) Это, кажется, не влияет ни на что, кроме появления контроллеров вида в StoryBoard, но НЕ в симуляторе.

Резюме. Чтобы ответить на ваш вопрос, в разделе "Общая информация о развертывании" установите флажок "Скрыть панель состояния". Это скроет строку состояния на экране запуска. Убедитесь, что на вашем снимке экрана запуска не отображается изображение строки состояния. Ни одна из настроек в StoryBoard или в Target не отключает панель состояния контроллера, поэтому кажется, что она останется такой, какой вы хотели. Однако я не тестировал какие-либо программные настройки; Я думаю, что вы не должны делать этого, и он будет работать так, как вы хотите.