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

  • self.title устанавливает заголовок navigationController и tabBarItem? Зачем?
  • Не удается уловить событие нажатия кнопки кнопки панели инструментов
  • Контекстные стили Actionbar
  • Добавление вертикальной полосы прокрутки в AlertDialog в Android?
  • Создание SearchView, который выглядит как руководство по разработке материалов
  • Изменить размер для строки состояния вызова?
  • Цвет выбранной вкладки в нижней навигации
  • Избегайте панели в autoHide в расширении Firefox
  • Interesting Posts

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

    Как освободить память «полностью спящий» процесс?

    AlertDialog.Builder с настраиваемой компоновкой и EditText; недоступен просмотр

    Как открыть файлы локального хранилища в Google Chrome?

    Управление несколькими версиями сериализованных объектов Java

    Как Mac OSX уделяет приоритетное внимание сетевым интерфейсам при маршрутизации?

    Как использовать файл дампа для диагностики утечки памяти?

    Почему эта двусмысленность здесь?

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

    Извлеките разницу между двумя строками в Java

    Макет сообщения Whatsapp – Как получить представление времени в той же строке

    Компиляция с -static-libgcc -static-libstdc ++ по-прежнему приводит к динамической зависимости от libc.so

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

    Как стилизовать поле подтверждения по умолчанию с помощью только css?

    Являются ли аксессуары для охлаждения ноутбуков (колодки, внешние вентиляторы и т. Д.) Эффективны?

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