ナビゲーションバーの大きなタイトルから小さなタイトルへの切り替えがスムーズではないiOS 13、スティッキー


11

私が持っているUINavigationControllerそれのデフォルト値とをnavigationBar.prefersLargeTitles = true

私はそれを切り替えていfalseたとき、私push の新しいシーンには、それを(呼び出すことができますDetailsViewControllerにそれを変更することで、) viewWillDisappear

override func viewWillDisappear(_ animated: Bool) {
   super.viewWillDisappear(animated)
   navigationController?.navigationBar.prefersLargeTitles = false
}

DetailsViewControllerは使っていwillMove(to parent:)ます。

override func willMove(toParent parent: UIViewController?) {
        navigationController?.navigationBar.prefersLargeTitles = true
}

大きなタイトルに戻すには。

iOS 12が正しい動作であることを考慮して、iOS 13がiOS 12がどのように実行しているかについて、添付のスナップショットを確認してください。

iOS 13

iOS 13

iOS 12

iOS 12


.prefersLargeTitles詳細ビューコントローラーをナビゲーションスタックにプッシュするときに変更する必要はありません。小さいタイトルが自動的に使用され、ルートビューコントローラーに戻ったら、大きいタイトルに戻ります。
henrik-dmg

@ henrik-dmg以前のようだったかどうかはわかりませんが、そうした場合、すべてが大きなタイトルになるわけではないので、試しました。
Mohmmad S

1
largeTitleDisplayModeに。automatic希望するトランジションが得られるはずです。
Harry J、

@HarryJどこ?
Mohmmad S

viewDidLoadまたはナビゲーションコントローラ内でnavigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

回答:


21

あなたがしていることはいつも間違っていました。ナビゲーションバーprefersLargeTitlestrue1回に設定し、再度タッチしないでください。

大きなタイトルが表示されるときに各ビューコントローラーが実行する処理を変更する方法は、そのビューコントローラーがnavigationItem(その内にviewDidLoad)独自のビューコントローラーに必要なを設定することlargeTitleDisplayModeです。したがって、最初のvcが.alwaysあり、2番目のvcがある場合、.neverすべてがスムーズになります。


そのような良い答え!それが大小のタイトルを同時に持つ方法だとは知らなかった!
Kacper Cz

0

同じ問題があり、2番目のViewControllerのストーリーボードにNavigationItemを配置する必要がありました。私のNavigationItemはセグエによって自動的に作成されていて、ビューが表示される前に作成が完了prefersLargeTitleしてviewDidLoad()いませんでした。NavigationItemをストーリーボードに追加すると、この問題が修正さprefersLargeTitleれ、ストーリーボードのプロパティメニューでを設定できるようになりました。


0

私の場合、この問題はの子であるビューコントローラへのセグエ中に発生していましたUITabBarControllerlargeTitleDisplayMode子ビューコントローラーの設定では、このバグを修正するには不十分でした。

UITabBarControllerシーンにナビゲーション項目を追加し、そこに設定することで問題を解決largeTitleDisplayMode.neverました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.