6

2つのUIViewController、「A」と「B」があります。「A」はshouldAutorotateToInterfaceOrientationをオーバーライドしてUIInterfaceOrientationPortraitに対してYESを返し、「B」はすべての方向に対してYESを返します。私の例では、「A」はルートナビゲーションビューコントローラーであり、「B」にはpushViewControllerを使用します。その後、デバイスを横向きに回転させます。これにより、「B」が正常に自動回転し、「B」(戻るボタンまたはpopViewController経由)をポップして「A」に戻ります。

iPhone OS 3.1.3をターゲットにすると、「A」は期待どおりに縦向きに戻ります。iPhone OS 3.2をターゲットにすると、2つの副作用があります。

  1. 「A」は横向きで表示されます。
  2. 「A」が表示されてもナビゲーションバーが更新されない。ナビゲーションバーには引き続き「B」の項目が表示されます。もう一度戻ってポップしようとすると、ナビゲーションバーがアニメーション化されて「A」のアイテムが表示されます。代わりに「B」をもう一度押して戻ると、ナビゲーションバーがアニメーション化されて「A」の項目が表示される前に2回ポップする必要があります。これらの「中間ポップ」の間、「A」のビューは表示されたままになります。

この問題を調査しているときに、手動で([UIDevice setOrientation]または変換を介して)回転を実行することを提案する他の回答を見ましたが、これは問題が何であるか、特に2つのOS間で動作が異なる理由を理解するのに役立ちません。

したがって、私の質問は、UINavigationControllerスタック上のすべてのUIViewControllerが、今後まったく同じ方向をサポートする必要があるかどうかです。そうでない場合は、OS 3.1.3の場合と同じように動作させるために、何かする必要がありますか?

4

2 に答える 2

1

新しいOSでは、同じ方向のセットをサポートするために、UINavigationControllerスタック内のすべてのUIViewControllerが必要であるように見えます。

于 2010-06-10T18:55:06.503 に答える
0

同じ問題があり、このリンクで答えを見つけました。ランドスケープモードでのUINavigationControllerナビゲーションスタックの問題ビューコントローラーの1つがshouldAutorotateToInterfaceOrientationでYESを返さなかった。

于 2010-05-11T06:46:52.860 に答える