私は非常に標準的なビュー階層を持っていますが、主にUITabBarController
には複数のUINavigationController
が含まれています。iOS 7はCurrentContextモーダルプレゼンテーションをオーバーライドします
新しいUINavigationController
を作成し、タブの1つからモーダルに表示しています。
私はそれがUIModalPresentationCurrentContext
で表示したいので、私はそうのようにそれを設定しています:
[newNavCon setModalPresentationStyle:UIModalPresentationCurrentContext];
そして、私はこのようにそれを提示:
[oldNavCon presentViewController:newNavCon animated:YES completion:nil];
しかし、それを提示しますと、私が設定した現在のコンテキストではなく、フルスクリーンです。
ブレークポイントを見ると、newNavCon
のモーダルプレゼンテーションスタイルは、の直後にUIModalPresentationFullScreen
に変更されています。
実際に私を混乱させるのは、この動作が起こることです。iOS7ののみです。これは、iOS 8-10で期待どおりに動作します。
どうしてですか? iOS7について私が知らないいくつかの特有の特徴がありますか?プレゼンテーションスタイルがこのようにオーバーライドされるのはなぜですか?
EDIT: 明確にするために、ここで私が働いているビュー階層です:
UIViewController
(フルスクリーンの容器、など)UITabBarController
(コンテナによって制御されるように、フルスクリーンではありません)definesPresentationContext
UINavigationController
(上記UIViewController
によってモーダル提示)definesPresentationContext
UINavigationController
(タブルートとして、モーダルウィンドウを提示する)modalPresentationStyle
=UIModalPresentationCurrentContext
UIViewController
私はnavConsのカスタムサブクラスを使用しますが、標準のUINavigationControllerに変更すると、それも起こります。 – ABeard89
シンボリックなブレークポイントを追加して、いつ変更されたのかを確認しました。これは私が書いたコードには間違いありません。ブレークポイントは、 'presentViewController'操作中のどこかでUIKitの中で停止しました。残念ながら、私はそれを理解できませんでした。私は私が働くことができる何かを見ませんでした。 – ABeard89
ありがとうございます。それは私が持っていた限りです。現在の文脈として提示したくないというのはとても奇妙なことです。ドキュメントにはできると書かれていますが、私が知る限り、正しいことをすべて実行しています。私の唯一の希望は、ここにいる誰かが、文書化されていないバグや、iOS7の振る舞いを思い出していたかどうかを確認することでした。 私はあなたが驚くことはありません。 XCode7を使ってテストしなければならないので、私はかろうじてテストする必要があります。 – ABeard89