UINavigationController
のデフォルトのポップ アニメーションが予期しない動作をするという問題が発生しています。
この問題は、コントローラーのUITraitCollection
.
私はユニバーサルアプリを持っていUIPresentationController
ます.iPadでは、ナビゲーションを部分モーダルで表示するカスタムがあり、その幅は画面幅の一部です。したがって、のプロパティでをオーバーライドしhorizontalSizeClass
てコンパクトにするので、この「ハーフ モーダル」に表示されるすべてのコントローラーは iPhone レイアウトを想定します。UIPresentationController
overrideTraitCollection
そのサイズ クラスをオーバーライドすると、バグが発生するようです。突然、その「ハーフモーダル」内でコントローラーをポップすると、アニメーションが横向きでめちゃくちゃになります (左または右にジャンプします)。
試み
まず、オーバーライドを取り除くと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