4

カスタム UIPresentationController があり、カスタム viewController プレゼンテーションの frameOfPresentedViewInContainerView をオーバーライドします。ステータスバーを除いて、すべて正常に動作します。

ステータス バーの外観をまったく変更したくありません。以前の外観のままにしておく必要があります。Apple ドキュメント: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/modalPresentationCapturesStatusBarAppearanceは、modalPresentationStyle が UIModalPresentationFullScreen OR modalPresentationCapturesStatusBarAppearance ではない場合、私は元気で、ステータスバーは変わらないはずです。

このコードで:

- (BOOL)prefersStatusBarHidden {
    NSLog(
        @"prefersStatusBarHidden was called %d %ld",
        self.modalPresentationCapturesStatusBarAppearance,
        (long)self.modalPresentationStyle
    );

    return YES;
}

modalPresentationCapturesStatusBarAppearance が NO (0 として表示) で modalPresentationStyle が UIModalPresentationCustom (4 として表示) であっても、prefersStatusBarHidden が呼び出されていることがわかります。

明らかに、これが viewController を表示するときにステータス バーが変化する理由です。

しかし、なぜ?

これについての私の考えは、iOS は、viewController がフルスクリーンで表示されていなくても、フルスクリーンで表示されていると考えているということです。

UIPresentationController のプロパティ shouldPresentInFullscreen を発見しました。デフォルトでは YES を返します。NO を返すことはまったく役に立たないので、そのプロパティが何をするのかさえわかりません...文字通り何の効果もありません。同じことが presentationStyle プロパティにも当てはまります。変更しても効果はありません。私は、presentationStyle プロパティが viewControllers modalPresentationStyle プロパティに「リダイレクト」されることを期待していましたが、それは最初にカスタム プレゼンテーションを開始するために必要な UIModalPresentationCustom のままです。

それで、私の質問は次のとおりです。カスタムUIPresentationControllerを使用してステータスバーをそのまま維持する方法を知っている人はいますか?そして、誰かがshouldPresentInFullscreenおよびpresentationStyleプロパティを説明できますか?

ありがとうございました!:)

4

1 に答える 1

0

childViewControllerForStatusBarStyle: を実装してみて、UIPresentationController (通常は UINavigationController) を呼び出すクラスで nil を返します。

これは、賢明に選択したステータス バー スタイルに子 VC を干渉させたくない場合に、Swift で行うことです。

override func childViewControllerForStatusBarStyle() -> UIViewController? {
    return nil // ignore childs and let this Navigation Controller handle the StatusBar style
}

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent // or .Default depending on your Style
}

UIViewControllerBasedStatusBarAppearanceこれには iOS8 以降が必要で、Info.plisttoにキーを設定している場合にのみ使用できますYES

おまけ: これが呼び出し元で役に立たない場合は、示されている Ccontroller で使用してください。私は自分のプロジェクトをチェックしました。そのうちの 1 つで、PopOver として表示されている NavigationController にもあり、今日の時点で正常に動作しています。

于 2016-03-04T00:21:14.900 に答える