Подтвердить что ты не робот

PrefersStatusBarHidden не называется

У меня есть UITabViewControllerUINavigationControllerUIViewController и вы хотите скрыть и отобразить 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
}
4b9b3361

Ответ 1

Выяснил это. в файле info.plist:  для отображения состояния панели управления должно быть установлено значение YES

Ответ 2

Во-первых, 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
}
  • Если вы хотите, чтобы строка состояния исчезла в Specify View Controller, в файле .m просто выполните:

Для Objective-C:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Для Swift:

override func prefersStatusBarHidden() -> Bool {
    return true
}

Ответ 3

Для быстрого 3 сначала убедитесь, что View controller-based status bar appearance установлен в YES в вашем файле Info plist

screenshot

И затем просто добавьте это в свой контроллер:

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

Я надеюсь, что это поможет людям в будущем.

Ответ 4

Возможно, это не решение проблемы OP, но то, что также может быть причиной отсутствия prefersStatusBarHidden, - это если вы использовали второе окно в своем делете приложения, например, для отображения заставки, и вы не скрыть его после отображения всплеска - тогда это окно получает события, которые приводят к вызову этих функций.

Ответ 5

Когда мы вложили UINavigationController, наш AppDelegate. Окно. RootViewController Обычно мы создаем navigationController, когда вначале вызовем функцию navigationController childViewControllerForStatusBarHidden, поскольку значение по умолчанию возвращает nil, затем вызывается сама функция navigationController prefersStatusBarHidden, поэтому строка состояния, которую мы установили в viewController через prefersStatusBarHidden, не будет вызвана, так как она не будет вызвана не работает Итак, мы собираемся создать наш собственный, который наследуется от NavigationController, в этом подклассе функции ChildViewControllerForStatusBarHidden.

Ответ 6

Вы можете написать расширение UINavigationController, которое переопределяет его реализацию по умолчанию и возвращает верхний ViewController.

  extension UINavigationController {
    override public func childViewControllerForStatusBarHidden() -> UIViewController{
       return self.topViewController
    }
   }

Ответ 7

Для Swift 4.2 iOS 12

Предполагая, что у вас есть ViewController содержащийся в UINavigationController. Создайте свой собственный подкласс UINavigationController и UINavigationController в него:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Убедитесь, что info.plist устанавливает View Controller в строке состояния