一部のコントローラーのステータスバーを表示および非表示にしたいと思います。これを実行できますか、それともアプリ全体の設定です。
Plistの更新に関する多くの投稿/質問を見てきました。
View controller-based status bar appearance - NO
これが完了したら、どのような制御が与えられますか?
アプリケーションのメイン画面にステータスバーを表示しようとしています。しかし、たとえばサイド(スライド)メニューで、表示しないようにしたいのですが、これは可能ですか?これはIBまたはコードで変更できますか?
編集-私は https://github.com/edgecase/ECSlidingViewController 実装を使用しています。
メインコントローラー(最初のページを表示)にはステータスバーが表示されますが、左側のメニューコントローラーはスライドするときに表示されません。
問題は、両方が同じルートコントローラー(スライディングビューコントローラー)内にあるため、完了するのが難しいということです。
理想的には、ホーム画面(メインページ)がスライドするときにステータスバーを表示できる場合に最適です。
Plist設定"View controller-based status bar appearance"
は、コントローラーごとの設定をiOS 7に適用するかどうかのみを制御します。
このplistオプションをNOに設定すると、次のようにステータスバーを手動で有効および無効にする必要があります(iOS 6まで)。
[[UIApplication sharedApplication] setStatusBarHidden:YES]
このplistオプションをYESに設定すると、このメソッドを各viewControllersに追加して、各コントローラーに個別にstatusBarを設定できます(特に、viewControllersのスマートサブクラスシステムがある場合は便利です)
- (BOOL)prefersStatusBarHidden {
return YES;
}
編集:
新しいviewControllerベースのステータスバーの外観を選択する場合、興味深い2つのメソッドがあります-
ステータスバーを強制的に更新します:
[self setNeedsStatusBarAppearanceUpdate]
ネストされたコントローラー(TabBarControllerサブクラスのcontentViewControllerなど)がある場合、TabBarControllerサブクラスは現在のchildViewControllerを要求し、この設定を転送します。特定の場合に役立つと思います。
- (UIViewController *)childViewControllerForStatusBarHidden {
return _myChildViewController;
}
- (UIViewController *)childViewControllerForStatusBarStyle {
return _myOtherViewController;
}
IOS 7以降では、-prefersStatusBarHidden
、たとえば、ステータスバーを非表示にするUIViewController
内:
- (BOOL)prefersStatusBarHidden {
return YES;
}
デフォルトはNO
です。
Swift:
override var prefersStatusBarHidden: Bool {
return true
}
アニメーションコードを表示または非表示にするかどうかを説明する変数のdidSetプロパティ内にアニメーションコードを配置することにより、アニメーションブロックのステータスバーを表示/非表示にすることもできます。 statusBarHidden
Boolに新しい値を設定すると、選択した期間にわたってステータスバーのアニメーション更新が自動的にトリガーされます。
/// Swift 3 syntax:
var statusBarHidden: Bool = true {
didSet {
UIView.animate(withDuration: 0.5) { () -> Void in
self.setNeedsStatusBarAppearanceUpdate()
}
}
}
override var prefersStatusBarHidden: Bool {
return statusBarHidden
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
statusBarHidden = false // show statusBar, animated, by triggering didSet block
}