web-dev-qa-db-ja.com

IOS7ステータスバーの一部のコントローラーでの非表示/表示

一部のコントローラーのステータスバーを表示および非表示にしたいと思います。これを実行できますか、それともアプリ全体の設定です。

Plistの更新に関する多くの投稿/質問を見てきました。

View controller-based status bar appearance - NO

これが完了したら、どのような制御が与えられますか?

アプリケーションのメイン画面にステータスバーを表示しようとしています。しかし、たとえばサイド(スライド)メニューで、表示しないようにしたいのですが、これは可能ですか?これはIBまたはコードで変更できますか?

編集-私は https://github.com/edgecase/ECSlidingViewController 実装を使用しています。

メインコントローラー(最初のページを表示)にはステータスバーが表示されますが、左側のメニューコントローラーはスライドするときに表示されません。

問題は、両方が同じルートコントローラー(スライディングビューコントローラー)内にあるため、完了するのが難しいということです。

理想的には、ホーム画面(メインページ)がスライドするときにステータスバーを表示できる場合に最適です。

44
StuartM

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;
}
128
auco

IOS 7以降では、-prefersStatusBarHidden、たとえば、ステータスバーを非表示にするUIViewController内:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

デフォルトはNOです。

14
Mojo66

Swift

override var prefersStatusBarHidden: Bool {
    return true
}
14
Danut Pralea

アニメーションコードを表示または非表示にするかどうかを説明する変数の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
}
4
Natalia

Mojo66answer の迅速なバージョン:

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