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

  • Как оживить Burger в Arrow с помощью Appcompat v7 21, панели инструментов и DrawerLayout
  • Изменение цвета фона отдельных элементов меню навигации
  • c: forEach внутри перьев (например, p: panelgrid) внутри ui: repeat
  • В каком порядке панели наиболее эффективны с точки зрения времени и производительности?
  • Создание SearchView, который выглядит как руководство по разработке материалов
  • Контекстные стили Actionbar
  • Панель не получает фокус
  • Избегайте панели в autoHide в расширении Firefox
  • Давайте будем гением компьютера.