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

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

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

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

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

Любые идеи?


person user2397282    schedule 20.07.2013    source источник


Ответы (14)


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

- (BOOL)prefersStatusBarHidden
{
    return YES;
}
person Quentin    schedule 30.07.2013
comment
Как это сделать глобально? - person jjxtra; 25.08.2013
comment
Кроме того, как указано в документации Apple, вы должны вызвать [self setNeedsStatusBarAppearanceUpdate]; после вызова этого метода с чем-то другим, кроме значения по умолчанию (значение по умолчанию - NO). - person manderson; 12.09.2013
comment
@PsychoDad Проверьте мой ответ, чтобы найти более глобальное решение. - person Idan; 20.09.2013
comment
Отлично спасибо. Я просто не могу понять, почему iOS 7 делает это и не уважает XIB, которые НЕ содержат настроек строки состояния! - person justinhartman; 24.09.2013
comment
Добавление этого в ViewController, добавленное в стек, - это все, что мне нужно, чтобы скрыть строку состояния в этом viewcontroller; строка состояния возвращается при удалении этого viewcontroller. - person MacD; 02.10.2013
comment
ГДЕ вызвать setNeedsStatusBarAppearanceUpdate? !! Внутри prefersStatusBarHidden ?? (Кажется, работает, даже если вы не вызываете setNeedsStatusBarAppearanceUpdate.) - person Fattie; 28.02.2014
comment
@joeBlow Я думаю, что Мандерсон говорит, что если вы измените возвращаемое значение метода prefersStatusBarHidden (например, если у вас более сложная логика, чем просто return YES;), вам нужно будет вызвать setNeedsStatusBarAppearanceUpdate, чтобы заставить iOS вызывать ваш prefersStatusBarHidden опять таки. - person Quentin; 04.03.2014
comment
Кстати, для всех, кто читает, это единственное надежное решение, которое я нашел iOS7, stackoverflow.com/a/19200027/294884 !! - person Fattie; 04.03.2014

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

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

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

person Idan    schedule 19.09.2013
comment
Мне потребовалось много времени, чтобы понять это. Я думаю, что это проблема, и Apple не упомянула об этом достаточно. рад помочь... - person Idan; 20.09.2013
comment
работает нормально, не забудьте установить значение .plist для строки состояния изначально скрыто на ДА. - person andreas-supersmart; 23.09.2013
comment
Вау, это единственное, что работало с Kobold2d 2.1.0 и iOS 7, большое спасибо! - person Binarian; 24.09.2013
comment
Что, если вы хотите, чтобы это значение plist было ДА, но скрыло строку состояния только для 1 или 2 UIViewController? - person mayuur; 24.09.2013
comment
Apple на самом деле не сторонники обратной совместимости. Давайте танцевать под свою флейту и обновим каждое из наших приложений. Извините, выражаю разочарование. Вызвано Apple. - person Henrik Erlandsson; 26.09.2013
comment
Я заметил, что решение работает для всех симуляторов, кроме iPhone Retina с 4-дюймовым 64-битным iOS 7.0, где строка состояния накладывается на экран-заставку. Мне пришлось дополнительно установить статусную строку изначально скрытую на ДА. - person kzia; 27.09.2013
comment
@kzia Это верно и для обычного iPhone. но это не так актуально для дела. Я добавлю это в любом случае. Благодарность - person Idan; 27.09.2013
comment
наконец это работает для меня. Потому что - (BOOL) предпочитает, чтобы метод statusbarhidden не работал в режиме просмотра модели. - person utkal patel; 17.10.2013
comment
Вам действительно следует избегать использования этого устаревшего подхода к управлению внешним видом. Вместо этого узнайте, как контроллеры представления могут управлять внешним видом строки состояния. - person lhunath; 14.01.2014
comment
@Ihunath Как (без создания всего приложения с нуля)? - person Idan; 15.01.2014
comment
Это правильный ответ ... потому что я хочу время от времени появляться и исчезать, а метод prefersStatusBarHidden является постоянным - person user2387149; 22.01.2014
comment
@ user2387149 Верно, но в некоторых случаях вы также можете вернуть NO (здесь следует быть очень осторожным). - person Idan; 01.03.2014
comment
Это сработало для меня, спасибо, Идан // показать в конкретном контроллере представления UIApplication.shared.isStatusBarHidden = false // скрыть в конкретном контроллере представления UIApplication.shared.isStatusBarHidden = true - person Mohan; 30.06.2017

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

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

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

person Sven    schedule 30.07.2013
comment
На мой взгляд, этот ответ лучше, потому что в моем приложении я хочу скрыть строку состояния только в ландшафтном режиме, спасибо! - person Son Nguyen; 07.08.2013
comment
спасибо, это помогает мне, так как я хочу скрыть это для всего моего приложения - person kevinl; 20.08.2013
comment
На мой взгляд, этот ответ должен быть лучшим ответом - ›Он объясняется здесь developer.apple.com/library/prerelease/ios/documentation/ - person marceloquinta; 10.09.2013
comment
Я сделал это, но похоже, что он только что скрыл строку состояния, однако мое приложение все еще «отталкивается» от объема места, которое займет строка состояния, и я все еще могу видеть индикатор батареи! - person vedran; 11.09.2013

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

информация о листе

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

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

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

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

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

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
person alones    schedule 11.09.2013
comment
У меня такая же проблема. Строка состояния скрыта, пока я не использую UIImagePicker. Я попробовал ваше решение, но оно не работает. Мне нужно было что-то добавить в ваш пост помимо кода? - person Dev01; 20.09.2013
comment
@WootWoot Я также добавил - (BOOL) prefersStatusBarHidden {return YES; } для просмотра контроллеров. Пожалуйста, попробуйте. - person alones; 24.09.2013
comment
мне кажется, это не работает ... стоит ли тебе звонить setNeedsStatusBarAppearanceUpdate? - person RyanM; 30.09.2013
comment
Мне нужно скрыть строку состояния при нажатии кнопки. Я пробовал код ниже, но это не сработало. Кто-нибудь может мне помочь. [[UIApplication sharedApplication] setStatusBarHidden: ДА]; - person janitheshan; 30.09.2013

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

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

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

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

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

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

person ikuramedia    schedule 20.09.2013
comment
Хотя что-то все еще кажется сломанным в iOS7, по крайней мере, на iPad - UIImagePickerController по-прежнему вызывает строку состояния во второй раз, когда он отображается ... Ура ... :-( В настоящее время я использую appDelegate и снова скрываю его в каждом представленииWillAppear Так что, даже если он на короткое время выглядит грязным, его снова быстро починят. - person ikuramedia; 26.09.2013
comment
Это единственный метод, который работал у меня на iOS8 ... почему-то prefersStatusBarHidden не вызывается на моем контроллере представления. - person mojuba; 17.05.2015

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

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

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

person Mike Gledhill    schedule 07.04.2014
comment
!! Это решение, которое сработало для меня в iOS 9.2, изменение plist не повлияло. - person mico; 19.02.2016

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

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

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

person sohail.hussain.dyn    schedule 10.09.2013

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

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

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

person Swindler    schedule 12.09.2013

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

[[UIApplication sharedApplication] setStatusBarHidden:YES];

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

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

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

person Dev01    schedule 19.09.2013
comment
'setStatusBarHidden:' устарел: впервые устарел в iOS 9.0 - Используйте - [UIViewController prefersStatusBarHidden] - person snibbe; 24.08.2020

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

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

override func prefersStatusBarHidden() -> Bool {
    return true
}
person Dan Beaulieu    schedule 09.08.2015

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

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

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

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

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

person testing    schedule 23.12.2014