Строка состояния не исчезнет


112

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

Я использую Xcode 5 и iOS 7 и пытался программно отключить строку состояния.

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

в файле info.plist и с помощью инспектора атрибутов в файле .xib. Кажется, ничего не работает.

Любые идеи?

Ответы:


220

Попробуйте добавить следующий метод к контроллеру корневого представления вашего приложения:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
Как это сделать глобально?
jjxtra

16
Кроме того, как указано в документации Apple, вы должны вызывать [self setNeedsStatusBarAppearanceUpdate];этот метод после вызова этого метода с чем-то другим, кроме значения по умолчанию (значение по умолчанию - NO).
Manderson

3
@PsychoDad Проверьте мой ответ, чтобы найти более глобальное решение.
Idan

2
Отлично спасибо. Я просто не могу понять, почему iOS 7 делает это и не соблюдает XIB, которые НЕ содержат настроек строки состояния!
Justinhartman

1
Добавление этого в ViewController, добавленное в стек, - это все, что мне нужно, чтобы скрыть строку состояния в этом контроллере просмотра; строка состояния возвращается при удалении этого viewcontroller.
MacD 02 окт.13,

126

Вы должны добавить это значение в список: « Просмотр внешнего вида строки состояния на основе контроллера » и установить для него значение « НЕТ ».

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

ОБНОВЛЕНИЕ: если вы хотите, чтобы строка состояния была скрыта на экране-заставке, не забудьте отметить « Скрывать во время запуска приложения » в параметрах целевой строки состояния. Кроме того, вы можете добавить « Строка состояния изначально скрыта » к « ДА » в списке, если вы не хотите делать это с помощью кода внутри приложения.


2
Мне потребовалось много времени, чтобы понять это. Я думаю, что это проблема, и Apple не упомянула об этом достаточно. рад помочь ...
Идан

7
работает нормально, не забудьте установить значение .plist для «Строка состояния изначально скрыта» на ДА.
andreas-supersmart

1
Вау, это единственное, что работало с Kobold2d 2.1.0 и iOS 7, большое спасибо!
Binarian

5
Apple на самом деле не сторонники обратной совместимости. Давайте все танцевать под свою флейту и обновим каждое из наших приложений. Извините, выражаю разочарование. Вызвано Apple.
Хенрик Эрландссон

1
наконец это работает для меня. Потому что - (BOOL) предпочитает, чтобы метод statusbarhidden не работал в режиме просмотра модели.
уткал патент

73

Опубликованный вами код работает для iOS 6.1 и ниже. Для iOS 7 Apple сделала доступными новые методы для прямого управления строкой состояния для каждого представления. Отключение этой опции в вашем Info.plist позволит вам скрыть строку состояния, по крайней мере, для текущей версии Developer Preview (4).

Добавьте это и установите NO

Для справки ознакомьтесь с руководством по переходу на iOS 7, которое доступно на портале разработчиков Apple.


3
На мой взгляд, этот ответ лучше, потому что в моем приложении я хочу скрыть строку состояния только в ландшафтном режиме, спасибо!
Сон Нгуен

спасибо, это помогает мне, так как я хочу скрыть это для всего моего приложения
Кевинл

2
На мой взгляд, этот ответ должен быть лучшим ответом -> Это объясняется здесь developer.apple.com/library/prerelease/ios/documentation/…
marceloquinta

5
Я сделал это, но похоже, что он только что скрыл строку состояния, однако мое приложение все еще «оттесняется» размером, занимаемым строкой состояния, и я все еще вижу индикатор батареи!
Ведран

36

ну, я пытаюсь скрыть строку состояния во всем моем приложении и в «app» -info.plist, и я добавляю две строки в словарь «Список свойств информации». Я добавляю «Просмотр внешнего вида строки состояния на основе контроллера», установите НЕТ и в » Строка состояния изначально скрыта "ставил ДА и у меня работает n_n"

информация о plist


2
Это переводит ваше приложение в режим совместимости, предназначенный исключительно для того, чтобы старые приложения работали должным образом на iOS 7, когда у разработчиков нет времени исправить приложение для нового способа работы. Вместо этого вам нужно реализовать методы предпочитаемых * в контроллерах представления.
lhunath

17

Однако, если вы используете UIImagePicker, строка состояния появится снова.

В этом случае вы должны скрыть строку состояния, как показано ниже,

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
У меня такая же проблема. Строка состояния скрыта, пока я не использую UIImagePicker. Я попробовал ваше решение, но оно у меня не работает. Мне нужно было что-то добавить в ваш пост, кроме кода?
Dev01

@WootWoot Я также добавил - (BOOL) prefersStatusBarHidden {return YES; } для просмотра контроллеров. Пожалуйста, попробуйте.
alones

мне кажется, это не работает .. тебе стоит позвонить setNeedsStatusBarAppearanceUpdate?
RyanM

Мне нужно скрыть строку состояния при нажатии кнопки. Я пробовал код ниже, но это не сработало. Кто-нибудь может мне помочь. [[UIApplication sharedApplication] setStatusBarHidden: ДА];
janitheshan

8

После долгих поисков я наконец нашел очень простое решение, которое также UIImagePickerControllerрешает проблему.

Как упоминалось в других ответах, установите строку состояния, скрытую в вашем AppDelegate didFinishLaunching, и установите для параметра «Просмотр внешнего вида строки состояния на основе контроллера» значение NO.

Затем в вашем AppDelegate:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voila - ваша строка состояния останется скрытой, даже если UIImagePickerController находится на переднем плане.

Это лучше, чем «повторно скрывать» его каждый раз, когда вы представляете UIImagePickerController, поскольку он остается скрытым во всем приложении.


2
Хотя что-то все еще кажется сломанным в iOS7, по крайней мере, на iPad - UIImagePickerController по-прежнему вызывает строку состояния при втором показе ... Ура ... :-( В настоящее время я использую appDelegate и снова скрываю его в каждом представлении «Так что, даже если на какое-то время он выглядит грязным, его снова быстро
починят»

1
Это единственный метод, который работал у меня на iOS8 ... каким-то образом prefersStatusBarHidden не вызывается в моем контроллере представления.
Mojuba

7

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

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

Надеюсь это поможет !


!! Это решение, которое сработало для меня в iOS 9.2, изменение plist не повлияло.
mico

5

Вы можете скрыть от резюме проекта. при запуске есть флажок скрыть.

Посмотреть снимок

введите описание изображения здесь


4

Я нашел для себя это решение. Работает как часы. Напишите этот код на своем viewcontroller, на котором вы хотите использовать UIImagePickerController.

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
     }

3

В дополнение к приведенному выше ответу обязательно реализуйте метод imagePickerControllerDidCancel и добавьте туда тот же код.


2

У меня тоже были проблемы с UIImagePicker. Как и в случае с ответом Алонеса, мое решение было следующим. Я добавил эту строку или код:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

к этой функции:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Я не тестировал это с iOS 6 или старше, но он отлично работает с iOS 7.


2

Быстрое решение

просто добавьте это в свои контроллеры представления:

override func prefersStatusBarHidden() -> Bool {
    return true
}

0

Я использую Xcode 6, у меня это решение работает на iOS 7 и 8:

Во-первых, установите для параметра «Просмотр внешнего вида строки состояния на основе контроллера» значение НЕТ в файле plist.

Во-вторых, в AppDelegate добавьте это:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

0

Моя проблема заключалась в том, что я использовал сдерживание контроллера представления. Только самый верхний контроллер представления, который, например, встроен в контроллер навигации, может скрывать или отображать строку состояния.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.