UINavigationControllerのデフォルトのポップ アニメーションが予期しない動作をするという問題が発生しています。
この問題は、コントローラーのUITraitCollection.
私はユニバーサルアプリを持っていUIPresentationControllerます.iPadでは、ナビゲーションを部分モーダルで表示するカスタムがあり、その幅は画面幅の一部です。したがって、のプロパティでをオーバーライドしhorizontalSizeClassてコンパクトにするので、この「ハーフ モーダル」に表示されるすべてのコントローラーは iPhone レイアウトを想定します。UIPresentationControlleroverrideTraitCollection
そのサイズ クラスをオーバーライドすると、バグが発生するようです。突然、その「ハーフモーダル」内でコントローラーをポップすると、アニメーションが横向きでめちゃくちゃになります (左または右にジャンプします)。
試み
まず、オーバーライドを取り除くとtraitCollection、バグはなくなります。ただし、これらのビューは通常の環境でも他の場所で再利用されるため、水平サイズ クラスをオーバーライドしたいのは明らかです。
horizontalSizeClassしたがって、次のように、モーダルの子の を他の方法でオーバーライドしようとしました。
- モーダル Nav を使用して
UINavigationControllerDelegate各子のtraitCollectionオン をオーバーライドするnavigationController:didShowViewController:animated:– これは違いがないように見えました traitCollectionプッシュする前に、最初の nav 子で 2 番目の子をオーバーライドする
そのようです:
[self.navigationController setOverrideTraitCollection:compactTraitCollection forChildViewController:secondaryController];
[self.navigationController pushViewController:secondaryController animated:YES];
興味深いことに、これによりポップ アニメーションのバグが修正されますが、プライマリ コントローラー ( self) はまだレギュラーのままhorizontalSizeClassです ... さらに、これは悪い習慣のようです。私のView Controllerは、プレゼンテーションについて何も知る必要はありません! これは によって処理される必要があり、プレゼンテーション コントローラーにプロパティUIPresentationControllerがあるという事実によってサポートされているようです。overrideTraitCollection
