2017-01-30 6 views
0

私は非常に標準的なビュー階層を持っていますが、主に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
+0

私はnavConsのカスタムサブクラスを使用しますが、標準のUINavigationControllerに変更すると、それも起こります。 – ABeard89

+0

シンボリックなブレークポイントを追加して、いつ変更されたのかを確認しました。これは私が書いたコードには間違いありません。ブレークポイントは、 'presentViewController'操作中のどこかでUIKitの中で停止しました。残念ながら、私はそれを理解できませんでした。私は私が働くことができる何かを見ませんでした。 – ABeard89

+0

ありがとうございます。それは私が持っていた限りです。現在の文脈として提示したくないというのはとても奇妙なことです。ドキュメントにはできると書かれていますが、私が知る限り、正しいことをすべて実行しています。私の唯一の希望は、ここにいる誰かが、文書化されていないバグや、iOS7の振る舞いを思い出していたかどうかを確認することでした。 私はあなたが驚くことはありません。 XCode7を使ってテストしなければならないので、私はかろうじてテストする必要があります。 – ABeard89

答えて

0

iPhoneデバイスやシミュレータでテストしていると思います。 iOS 7以前では、UIModalPresentationCurrentContextiPad専用の機能でした。

+0

それは、それがフルスクリーンに強制され続ける理由を説明してくれるでしょう!そして、私はiPhone上でテストしています。 – ABeard89

+0

ドキュメントがこの小さなおしゃべりに言及していれば助かります... – ABeard89

+0

iPhoneでios7で何かがモーダルに表示されているのであれば、それは完全な画面にしかなりませんか? – ABeard89

関連する問題