カスタム 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プロパティを説明できますか?
ありがとうございました!:)