44

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

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

View controller-based status bar appearance - NO

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

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

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

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

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

理想的には、ホーム画面 (メイン ページ) がスライドするときにステータス バーを一緒に表示できれば、それが最も見栄えがよくなります。

4

5 に答える 5

129

plist 設定"View controller-based status bar appearance"は、iOS 7 でコントローラーごとの設定を適用するかどうかのみを制御します。

この plist オプションを NO に設定すると、次のように手動でステータス バーを有効または無効にする必要があります (iOS 6 まではそうでした):

[[UIApplication sharedApplication] setStatusBarHidden:YES]

この plist オプションを YES に設定すると、このメソッドを各 viewController に追加して、各コントローラーに個別に statusBar を設定できます (これは、viewController のスマート サブクラス システムがある場合に特に便利です)。

- (BOOL)prefersStatusBarHidden {
    return YES;
}

編集:

新しいviewControllerベースのステータスバーの外観を選択している場合、興味深いメソッドがさらに2つあります-

次のコマンドでステータスバーの更新を強制します。

[self setNeedsStatusBarAppearanceUpdate]

ネストされたコントローラーがある場合 (たとえば、TabBarController サブクラスの contentViewController の場合、TabBarController サブクラスは現在の childViewController であることを確認し、この設定を転送する場合があります。特定のケースでは、次のように使用できると思います:

- (UIViewController *)childViewControllerForStatusBarHidden {
     return _myChildViewController;
}
- (UIViewController *)childViewControllerForStatusBarStyle {
     return _myOtherViewController;
}
于 2013-09-20T11:36:29.570 に答える
14

iOS 7 以降では-prefersStatusBarHidden、たとえばUIViewController、ステータス バーを非表示にする を実装するだけです。

- (BOOL)prefersStatusBarHidden {
    return YES;
}

デフォルトは ですNO

于 2015-09-22T23:24:21.910 に答える