Как скрыть строку состояния iOS
В моей строке состояния видео приложения iOS скрыты некоторые controllerы. Я сделал это, используя следующий код.
[[UIApplication sharedApplication] setStatusBarHidden:YES];
-
Он работает для iOS 5 и iOS 6, но не в iOS 7.
-
Я попытался с этим, в частности, с controllerом вида,
Например:
-(BOOL)prefersStatusBarHidden { return YES; }
Он работает хорошо, но я не могу показать строку состояния снова в controllerе родительского представления.
- В каком порядке панели наиболее эффективны с точки зрения времени и производительности?
- Избегайте панели в autoHide в расширении Firefox
- Панель навигации под панелью инструментов
- Как оживить Burger в Arrow с помощью Appcompat v7 21, панели инструментов и DrawerLayout
- Изменить размер для строки состояния вызова?
- Цвет выбранной вкладки в нижней навигации
- Android: как заголовок центра в ToolBar
- Панель c # для рисования графики и прокрутки
Вы должны добавить это значение в 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 строки кода
-
в приложении: (UIApplication *) приложение didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write
[[UIApplication sharedApplication] setStatusBarHidden:YES];
-
в 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; }
- открыть 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
строку состояния