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

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

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • Он работает для iOS 5 и iOS 6, но не в iOS 7.

  • Я попытался с этим в конкретном контроллере просмотра,

Например:

-(BOOL)prefersStatusBarHidden { return YES; }

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

Ответ 1

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

enter image description here

Ответ 2

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

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

Image

Ответ 3

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

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

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

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

также изменить файл info.plist Просмотр состояния панели управления на основе контроллера "= НЕТ

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

Ответ 4

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

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

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

Ответ 5

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


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)
}

Ответ 6

Я сделал следующее и, похоже, работает (даже в 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;
}

Ответ 7

  • UIApplication.setStatusBarX устарел с iOS9
  • Он устарел, чтобы иметь UIViewControllerBasedStatusBarAppearance = NO в вашем файле info.plist
  • Таким образом, мы должны использовать preferredStatusBarX во всех наших контроллерах представления.

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

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

Ответ 8

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

  • в приложении: (приложение UIApplication *) doneFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

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

     View-Controller Based Status Bar Appearance = NO
    

Ответ 9

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

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

enter image description here

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

enter image description here

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

enter image description here

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

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

enter image description here

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

enter image description here

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

Ответ 10

Попробуйте,

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

Ответ 11

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

override var prefersStatusBarHidden: Bool {
    return true
}

Ответ 12

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

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

Ответ 13

Вот версия 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()

in say viewDidLoad().

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

Ответ 14

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

Ответ 15

Шаги для строки состояния hide в 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

Ответ 16

iOS 9 и далее:

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

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

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

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

Как statusBarHidden Устаревший из iOS9:

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

Ответ 17

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

1- В параметре info.plist ниже свойство

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

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

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

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

Ответ 18

От 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

Ответ 19

Чтобы ответить на вопрос Сузиты: используйте 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 (или как вы его называете) значение НЕТ. Вызовите preferStatusBarHidden косвенно, сделав еще один вызов

[self setNeedsStatusBarAppearanceUpdate]

Ответ 20

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

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

View controller-based status bar appearance: NO

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

UIApplication.shared.isStatusBarHidden = true

Ответ 21

Swift 5

Используйте следующие шаги, чтобы скрыть строку состояния iOS:

  1. Открыть на Info.plist.
  2. Добавить новый ключ. Просмотреть внешний вид строки состояния контроллера и установить значение NO.
  3. Добавить новый ключ Строка состояния изначально скрыта и значение установлено в YES.
  4. Перекомпилируйте проект.
  5. Строка состояния теперь должна быть скрыта на телефоне iOS.

Скриншот окончательных настроек:

Final Settings

Это работает на Xcode 10.2