Как скрыть строку состояния iOS

В моей строке состояния видео приложения iOS скрыты некоторые controllerы. Я сделал это, используя следующий код.

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

Например:

 -(BOOL)prefersStatusBarHidden { return YES; } 

Он работает хорошо, но я не могу показать строку состояния снова в controllerе родительского представления.

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

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

Добавьте в свой Info.plist следующее:

 UIStatusBarHidden  UIViewControllerBasedStatusBarAppearance  

Образ

Добавить следующую строку в viewdidload

  [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 

и добавьте новый метод

  - (BOOL)prefersStatusBarHidden { return YES; } 

также измените файл info.plist. Отобразите строку состояния на основе controllerа. = NO

его работы для меня

В Plist добавьте следующие свойства.

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

теперь строка состояния будет скрыта.

Попробуйте этот простой метод:


Objective-C:

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

Swift:

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None) } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None) } 

Я сделал следующее и, похоже, работает (даже в iOS 8):

 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { [[UIApplication sharedApplication] setStatusBarHidden:YES]; } } - (BOOL)prefersStatusBarHidden { return YES; } 

Чтобы скрыть строку состояния в iOS7, вам нужно 2 строки кода

  1. в приложении: (UIApplication *) приложение didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

      [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
  2. в info.plist добавить это

      View-Controller Based Status Bar Appearance = NO 
  • UIApplication.setStatusBarX устарели с iOS9
  • Это устарело, чтобы иметь UIViewControllerBasedStatusBarAppearance = NO в вашем info.plist
  • Поэтому мы должны использовать preferredStatusBarX во всех наших controllerах представлений

Но это становится более интересным, когда задействован UINavigationController:

  • Если navigationBarHidden = true, вызывается дочерний UIViewController preferredStatusBarX, так как дочерний элемент отображает содержимое в строке состояния.
  • Если navigationBarHidden = false, вызывается привилегия UINavigationControllerStatusBarX, ведь он отображает содержимое в строке состояния.
  • По умолчанию привилегия UINavigationControllerStatusBarStyle использует значение из UINav.navigationBar.barStyle. .Default = черная строка состояния, .Black = белый статус.
  • Поэтому, если вы устанавливаете barTintColor на какой-то пользовательский цвет (который, скорее всего, есть), вам также нужно установить barStyle в. Black, чтобы получить белое содержимое строки состояния. Я установил barStyle в черный цвет перед установкой barTintColor, в случае, если barStyle переопределяет barTintColor.
  • Альтернативой является то, что вы можете подclassифицировать UINavigationController, а не сбрасывать со стилем в стиле бар.
  • ОДНАКО, если вы подclassифицируете UINavigationController, вы не можете контролировать панель состояния, если navigationBarHidden = true. Как-то UIKit идет прямо к дочернему UIViewController, не спрашивая UINavigationController в этой ситуации. Я бы подумал, что должно быть ответственностью UINavigationController, чтобы спросить ребенка> пожимать плечами <.
  • И отображаемый в моделях UIViewController получает только сообщение в строке состояния, если modalPresentationStyle = .FullScreen.
  • Если у вас есть настраиваемый режим просмотра модального представления, и вы действительно хотите, чтобы он контролировал строку состояния, вы можете установить modalPresentationCapturesStatusBarAppearance = true.

Для лучшего понимания добавьте несколько фотографий с комментариями:

Приложение перед любыми изменениями

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

Найденный в папке Project Navigator именем Supporting Files и щелкните файл * .plist

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

После того, как вы увидите разные настройки вашего приложения. Вам нужно добавить 2 ключа UIStatusBarHidden и UIViewControllerBasedStatusBarAppearance . Вы можете сделать это, просто нажав кнопку +

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

После нажатия + вы можете выбрать один из клавиш – просто начните печатать.

Правильная версия:

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

И, наконец, приложение после применения этих изменений:

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

Кроме того, вы можете найти альтернативное решение здесь

Попробуй это;

 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 

В iOS10 все, что мне нужно было сделать, это переопределить prefersStatusBarHidden var в моем RootViewController (Swift):

 override var prefersStatusBarHidden: Bool { return true } 

Чтобы скрыть строку состояния в iOS7:

Откройте ваш plist-файл, затем добавьте строку с надписью «Просмотр состояния панели управления на основе controllerа» и установите для нее значение NO .

Вот версия Swift (pre iOS9):

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None) } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None) } 

Это также работает (iOS7 +):

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

Вам также необходимо позвонить:

 setNeedsStatusBarAppearanceUpdate() 

в say viewDidLoad() .

Обратите внимание: если вы используете controller SplitView или какой-либо другой controller представления container , вам также необходимо вернуть его class, когда его отправил childViewControllerForStatusBarHidden . Один из способов сделать это – иметь открытый слабый var для say statusController и вернуть его в этот переопределенный метод.

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

Шаги для строки состояния скрытия в iOS
1. Откройте файл AppDelegate.m , добавьте application.statusBarHidden в метод didFinishLaunchingWithOptions

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. application.statusBarHidden = YES; return YES; } 
  1. открыть info.plist и установить

View controller-based status bar appearance NO

iOS 9 и далее:

Поскольку метод statusBarHidden был устарел из iOS9, вам нужно добавить два значения в plist, как показано ниже:

 UIStatusBarHidden  UIViewControllerBasedStatusBarAppearance  

или пользовательским интерфейсом. Пожалуйста, снимите изображение ниже:

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

Поскольку statusBarHidden из iOS9 :

@property (readwrite, nonatomic, getter = isStatusBarHidden) BOOL statusBarHidden NS_ DEPRECATED _IOS (2_0, 9_0 , «Использовать – [UIViewController prefersStatusBarHidden]») __TVOS_PROHIBITED;

Из UIKit > UIApplication.h :

 // Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system. @property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden; - (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2); 

Таким образом, следует установить View controller-based status bar appearance на NO

Чтобы ответить на вопрос Сузиты : используйте setNeedsStatusBarAppearanceUpdate . Это вызовет prefersStatusBarHidden для обновления с желаемым статусом состояния. Попробуй это:

  @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early - (BOOL)prefersStatusBarHidden { return self.isHideStatusBar; } - (void)someMethod { // triggered by an event or user action [self setHideStatusBar:YES]; [self setNeedsStatusBarAppearanceUpdate]; } 

Если вы хотите снова увидеть строку состояния, установите для свойства hideStatusBar (или как вы его называете) значение НЕТ. Вызовите optStatusBarHidden косвенно, сделав еще один вызов

 [self setNeedsStatusBarAppearanceUpdate] 

Обновление для Swift 3:

Обновите Info.plist со следующей информацией:

View controller-based status bar appearance: NO

Затем в ViewController или в другом месте:

UIApplication.shared.isStatusBarHidden = true

ФИКСИРОВАННОЕ РЕШЕНИЕ ДЛЯ SWIFT 3+ (iOS 9, 10)

1- В инфо.plist установлен ниже свойство

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

2- Вставить под кодом корневой controller,

  private var isStatusBarHidden = true { didSet { setNeedsStatusBarAppearanceUpdate() } } override var prefersStatusBarHidden: Bool { return isStatusBarHidden } 

Вы можете вызвать isStatusBarHidden = true и isStatusBarHidden = false где вы хотите hide/show строку состояния

  • Как исправить метод getActionBar может вызвать java.lang.NullPointerException
  • Как скрыть навигационную панель постоянно в андроид-активности?
  • Добавление вертикальной полосы прокрутки в AlertDialog в Android?
  • Чат клиента смайликов окно JAVA
  • self.title устанавливает заголовок navigationController и tabBarItem? Зачем?
  • Как установить текст панели инструментов и цвет стрелки назад
  • Создание SearchView, который выглядит как руководство по разработке материалов
  • Контекстные стили Actionbar
  • Interesting Posts

    Создайте загрузочный USB-накопитель Linux (Knoppix) (с несколькими разделами) с Linux или Mac OS X

    Что является прецедентом для перегрузки функций-членов в ссылочных квалификаторах?

    Будет ли обычная плата PCI Express работать в слот PCI Express x16 Graphics (PEG)?

    библиотека математической оптимизации для Java – бесплатно или с открытым исходным кодом?

    Есть ли программное обеспечение, которое будет организовывать файлы и папки?

    Как создать подписанный файл apk для выпуска с помощью Gradle?

    Упаковка шаблонов JSF

    Как заполнить информацию прокси в файле конфигурации cntlm?

    Ошибка Java: незаконный запуск выражения

    c # преобразовать строковое выражение в логическое выражение

    Действительно ли Windows 8 отключается?

    Проверка времени сгенерированного времени компиляции для std :: vector

    Что такое MVC и каковы его преимущества?

    Telnet не будет запускаться из приглашения cmd в Windows 7

    Как я могу манипулировать предварительным просмотром камеры?

    Давайте будем гением компьютера.