たとえば、私は3つのビューコントローラを持っています:A
、B
、C
、すべてがナビゲーションコントローラに組み込まれています。 A
およびB
にはナビゲーションバーがあり、C
はありません。インタラクティブなトランジション:ナビゲーションバーの外観の問題
私はB
とC
の間のカスタムインタラクティブな移行を持っています。私はC
に消えるために私のナビゲーションバーを必要とするので、私はUINavigationControllerDelegate
のこの機能を実装:私はプッシュポップ遷移する際
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if viewController is C {
navigationController.setNavigationBarHidden(true, animated: animated)
}
else {
navigationController.setNavigationBarHidden(false, animated: animated)
}
}
すべては、一般的なシナリオでは完璧に動作します。
しかし、私は移行B
キャンセルとき - 私のUIPercentDrivenInteractiveTransition
にcancel()
を呼び出すことによって>C
を、ナビゲーションバーはB
に表示されません。ここで私はsetNavigationBarHidden(false, ...)
に電話しなければならないが、私はそれを行う正しい場所を見つけることができなかった。
B
のviewWillAppear
で呼び出すと、ナビゲーションバーが表示されますが、実際には奇妙に見えます。ナビゲーションバーがある場合にはC
の要素が含まれています。 A
にポップバックすると、コンテンツがある程度表示されてすぐに点滅しますが、移行後すぐにA
ナビゲーションバーがB
ナビゲーションバーに置き換えられます。ナビゲーションバーは、スタックのように
だから、それはそうは何とかB
後に壊れている - >C
遷移のキャンセル、そのようなviewcontrollersに相対的にシフトしているように見える:
has
-----------------------------------------------
| ViewController | Navigation bar of |
-----------------------------------------------
| A | B |
-----------------------------------------------
| B | C |
-----------------------------------------------
だから、私の質問が正しい何ですこの場合、navigationController.setNavigationBarHidden(false, animated: true)
に電話する場所はありますか?