wake-up-neo.com

prefersStatusBarHidden wird nicht aufgerufen

Ich habe eine UITabViewController -> UINavigationController -> UIViewController und möchte die Statusleiste ein- und ausblenden. Beim Aufruf von setNeedsStatusBarAppearanceUpdate() wird die Methode prefersStatusBarHidden nicht aufgerufen. 

func fadeOutStatusBar (notification: NSNotification) {
    statusBarHidden = true
    self.setNeedsStatusBarAppearanceUpdate()
}

func fadeInStatusBar (notification: NSNotification) {
    statusBarHidden = false
    self.setNeedsStatusBarAppearanceUpdate()
}

override func prefersStatusBarHidden() -> Bool {
    return statusBarHidden
}
18
Md1079

Herausgefunden. in der info.plist-Datei: Die Anzeige der Controller-Statusleiste sollte auf YES gesetzt werden

19
Md1079

Zunächst muss View controller-based status bar appearance in der .plist-Datei aufYESgesetzt sein.

  • Wenn die Statusleiste in der App " whole " ausgeblendet werden soll:

Für Objective-C:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [application setStatusBarHidden:YES];

    return YES;
}

Für Swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
    application.statusBarHidden = true

    return true
}
  • Wenn die gewünschte Statusleiste in Specify View Controller verschwunden sein soll - /, in .m-Datei, implementieren Sie einfach:

Für Objective-C:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Für Swift:

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

Stellen Sie zunächst für Swift 3 sicher, dass View controller-based status bar appearance in Ihrer YES plist-Datei auf Info gesetzt ist

 screenshot

Und fügen Sie dies einfach zu Ihrem View-Controller hinzu:

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

Ich hoffe, das hilft den Menschen in der Zukunft.

13
Barrett

Vielleicht keine Lösung für das OP-Problem, aber die Ursache für den Aufruf von prefersStatusBarHidden ist möglicherweise, dass Sie in Ihrem App-Delegaten ein zweites Fenster verwendet haben, z wurde gezeigt - dann erhält dieses Fenster die Ereignisse, die zum Aufruf dieser Funktionen führen.

8
TheEye

sie können eine Erweiterung von UINavigationController schreiben, die die Standardimplementierung überschreibt und den oberen ViewController zurückgibt.

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

Wenn wir den UINavigationController , unsere AppDelegate verschachtelten. Fenster. RootViewController Normalerweise erstellen wir den navigationController, wenn er zum ersten Mal in der Funktion navigationController childViewControllerForStatusBarHidden aufgerufen wird, da der Standardwert nil zurückgibt und dann navigationController prefersStatusBarHidden function selbst heißt viewController über die Funktion prefersStatusBarHidden wird nicht aufgerufen, daher wird es nicht funktionieren. Wir erstellen also einen eigenen, der von NavigationController in dieser Unterklasse ChildViewControllerForStatusBarHidden erbt funktion.

0
JackySong

Für Swift 4.2 iOS 12 

Angenommen, Sie haben eine ViewController in UINavigationController. Erstellen Sie Ihre eigene Unterklasse von UINavigationController und schließen Sie sie ein: 

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Stellen Sie sicher, dass info.plist die View Controller-basierte Einstellung der Statusleiste setzt

0
idej1234

Wenn Sie andere window nicht ausgeblendet haben, wird die Methode nicht aufgerufen. Verstecken Sie einfach ein anderes Fenster, es wird so funktionieren, wie Sie es wünschen

0
sai Ma