Ответ 1
Вы должны добавить это значение в plist: " Просмотреть статус панели управления на основе контроллера" и установить его в " НЕТ".
В моей строке состояния видео в приложении iOS скрыты некоторые контроллеры представлений. Я сделал это, используя следующий код.
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Он работает для iOS 5 и iOS 6, но не в iOS 7.
Я попытался с этим в конкретном контроллере просмотра,
Например:
-(BOOL)prefersStatusBarHidden { return YES; }
Он работает хорошо, но я не могу показать строку состояния снова в контроллере родительского представления.
Вы должны добавить это значение в plist: " Просмотреть статус панели управления на основе контроллера" и установить его в " НЕТ".
Добавьте в свой Info.plist следующее:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Добавить следующую строку в viewdidload
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationFade];
и добавьте новый метод
- (BOOL)prefersStatusBarHidden {
return YES;
}
также изменить файл info.plist Просмотр состояния панели управления на основе контроллера "= НЕТ
его работы для меня
В Plist добавьте следующие свойства.
Status bar is initially hidden = YES
View controller-based status bar appearance = NO
теперь строка состояния будет скрыта.
- (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];
}
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;
}
Но это становится более интересным, когда задействован UINavigationController:
Чтобы скрыть строку состояния в iOS7, вам нужно 2 строки кода
в приложении: (приложение UIApplication *) doneFinishLaunchingWithOptions: (NSDictionary *) launchOptions write
[[UIApplication sharedApplication] setStatusBarHidden:YES];
в info.plist добавьте это
View-Controller Based Status Bar Appearance = NO
Для лучшего понимания добавьте несколько фотографий с комментариями:
Приложение перед любыми изменениями
Найден в вашей папке 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 файл, затем добавьте строку с именем "Просмотр состояния панели управления на основе контроллера" и установите для нее значение 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()
in say viewDidLoad()
.
Обратите внимание: если вы используете контроллер SplitView или какой-либо другой контроллер представления container
, вам также необходимо вернуть его класс при его отправке childViewControllerForStatusBarHidden
. Один из способов сделать это - иметь открытый слабый var, например statusController
, и вернуть его в этот переопределенный метод.
Вы должны добавить это значение в plist: "Просмотреть статус панели управления на основе контроллера" и установить его "НЕТ".
Шаги для строки состояния 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;
}
View controller-based status bar appearance
установить NO
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;
ФИКСИРОВАННОЕ РЕШЕНИЕ ДЛЯ 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
строку состояния
От 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 (или как вы его называете) значение НЕТ. Вызовите preferStatusBarHidden косвенно, сделав еще один вызов
[self setNeedsStatusBarAppearanceUpdate]
Обновление для Swift 3:
Обновить Info.plist со следующей информацией:
View controller-based status bar appearance: NO
Затем в ViewController или в другом месте:
UIApplication.shared.isStatusBarHidden = true
Swift 5
Используйте следующие шаги, чтобы скрыть строку состояния iOS:
Скриншот окончательных настроек:
Это работает на Xcode 10.2