web-dev-qa-db-ja.com

prefersStatusBarHiddenは呼び出されません

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
}
21
Md1079

理解した。 info.plistファイル内:ビューコントローラーステータスバーの外観をYESに設定する必要があります

20
Md1079

まず、View controller-based status bar appearance の中に .plistファイルは[〜#〜] yes [〜#〜]に設定する必要があります。

  • wholeアプリでステータスバーを非表示にする場合:

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
}
  • ステータスバーをView Controllerの指定で非表示にする場合は、.mファイル、実装のみ:

Objective-Cの場合:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Swiftの場合:

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

Swift 3の場合、まず、View controller-based status bar appearanceは、YES plistファイルでInfoに設定されます

screenshot

そして、これをView Controllerに追加するだけです:

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

これが将来人々に役立つことを願っています。

16
Barrett

OPの問題の解決策ではないかもしれませんが、prefersStatusBarHiddenが呼び出されない原因として考えられるのは、スプラッシュ画面を表示するなど、アプリのデリゲートで2番目のウィンドウを使用した場合です。スプラッシュが表示された後に非表示にします-そのウィンドウは、これらの関数の呼び出しにつながるイベントを取得します。

10
TheEye

uINavigationControllerの拡張機能を作成して、デフォルトの実装をオーバーライドし、最上位のViewControllerを返すことができます。

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

INavigationControllerをネストすると、AppDelegate。Window。RootViewController通常、最初にnavigationControllerを呼び出すときにnavigationControllerを作成しますchildViewControllerForStatusBarHidden関数nilを返し、navigationController prefersStatusBarHidden関数自体と呼ばれるため、prefersStatusBarHidden関数を介してviewControllerに設定したステータスバーは呼び出されないため、機能しません。そのため、このサブクラスのChildViewControllerForStatusBarHidden関数からNavigationControllerを継承する独自のものを作成します。

0
JackySong

Swift 4.2 iOS 12

ViewController内にUINavigationControllerが含まれていると仮定します。 UINavigationControllerの独自のサブクラスを作成し、そこに含めます:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

確認してください info.plistセットView Controllerベースのステータスバーの設定

0
idej1234

他のwindowが非表示になっていない場合、メソッドは呼び出されません。他のウィンドウを非表示にするだけで、希望どおりに機能します

0
sai Ma