ナビゲーションバーの大きなタイトルから小さなタイトルへの切り替えがスムーズではない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

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

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


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

0

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


0

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

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

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