Ответ 1
Выяснил это. в файле info.plist: для отображения состояния панели управления должно быть установлено значение YES
У меня есть UITabViewController
→ UINavigationController
→ UIViewController
и вы хотите скрыть и отобразить statusBar. когда я вызываю setNeedsStatusBarAppearanceUpdate()
, метод prefersStatusBarHidden
не вызывается.
func fadeOutStatusBar (notification: NSNotification) {
statusBarHidden = true
self.setNeedsStatusBarAppearanceUpdate()
}
func fadeInStatusBar (notification: NSNotification) {
statusBarHidden = false
self.setNeedsStatusBarAppearanceUpdate()
}
override func prefersStatusBarHidden() -> Bool {
return statusBarHidden
}
Выяснил это. в файле info.plist: для отображения состояния панели управления должно быть установлено значение YES
Во-первых, View controller-based status bar appearance
в файле .plist
должен быть установлен в YES.
Для Objective-C:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[application setStatusBarHidden:YES];
return YES;
}
Для Swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
application.statusBarHidden = true
return true
}
.m
просто выполните:Для Objective-C:
- (BOOL)prefersStatusBarHidden {
return YES;
}
Для Swift:
override func prefersStatusBarHidden() -> Bool {
return true
}
Для быстрого 3 сначала убедитесь, что View controller-based status bar appearance
установлен в YES
в вашем файле Info
plist
И затем просто добавьте это в свой контроллер:
override var prefersStatusBarHidden: Bool {
get {
return true
}
}
Я надеюсь, что это поможет людям в будущем.
Возможно, это не решение проблемы OP, но то, что также может быть причиной отсутствия prefersStatusBarHidden
, - это если вы использовали второе окно в своем делете приложения, например, для отображения заставки, и вы не скрыть его после отображения всплеска - тогда это окно получает события, которые приводят к вызову этих функций.
Когда мы вложили UINavigationController, наш AppDelegate. Окно. RootViewController Обычно мы создаем navigationController, когда вначале вызовем функцию navigationController childViewControllerForStatusBarHidden, поскольку значение по умолчанию возвращает nil, затем вызывается сама функция navigationController prefersStatusBarHidden, поэтому строка состояния, которую мы установили в viewController через prefersStatusBarHidden, не будет вызвана, так как она не будет вызвана не работает Итак, мы собираемся создать наш собственный, который наследуется от NavigationController, в этом подклассе функции ChildViewControllerForStatusBarHidden.
Вы можете написать расширение UINavigationController, которое переопределяет его реализацию по умолчанию и возвращает верхний ViewController.
extension UINavigationController {
override public func childViewControllerForStatusBarHidden() -> UIViewController{
return self.topViewController
}
}
Для Swift 4.2 iOS 12
Предполагая, что у вас есть ViewController
содержащийся в UINavigationController
. Создайте свой собственный подкласс UINavigationController
и UINavigationController
в него:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Убедитесь, что info.plist
устанавливает View Controller
в строке состояния