custom を使用して、ナビゲーション コントローラーに含まれるコントローラーからナビゲーション コントローラーを提示しますUIPresentationController
。
私の問題は、元のステータス バーの外観を保持できないことです。ステータスバーの制御を新しく提示されたモーダルに任せたくありません。代わりに、ソースコントローラーに任せたいと思います。これどうやってするの?
私は遊んでmodalPresentationStyle
いましたが、それで何も達成できませんでした。私の場合、唯一の妥当な値はUIModalPresentationCustom
です。
preferredStatusBarStyle
iOS 9 では、ナビゲーション コントローラーがナビゲーション バー スタイルから適切なものを選択するため、どこにも実装しません。
self.stackTransitionDelegate = [[StackTransitionDelegate alloc] init];
controller.modalPresentationStyle = UIModalPresentationCustom;
controller.transitioningDelegate = self.stackTransitionDelegate;
[self.presentationContext presentViewController:controller animated:YES completion:nil];
トランジション自体はハーフモーダルです。つまり、ソース コントローラの一部が画面に残ります。UIPresentationController
これが、サブクラスが実装する理由ですshouldRemovePresentersView
- (BOOL)shouldPresentInFullscreen {
return NO;
}
アップデート:
次のレーダー: ( https://openradar.appspot.com/22565293 ) は問題を説明しており、プライベート メソッドの助けを借りて、提示されたコントローラーがステータス バーの外観をキャプチャするのを防ぐことができます。
- (BOOL)_shouldChangeStatusBarViewController {
if([self.presentedViewController isBeingPresented]) {
return NO;
}
return YES;
}
同じことを達成する公式の方法があるのだろうか。