I have a UINavigationController
with default value of it's navigationBar.prefersLargeTitles = true
.
I am switching that to false
when I push
into a new scene lets call it (DetailsViewController
), by changing it into the viewWillDisappear
.
override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) navigationController?.navigationBar.prefersLargeTitles = false }
Now in DetailsViewController
I am using willMove(to parent:)
.
override func willMove(toParent parent: UIViewController?) { navigationController?.navigationBar.prefersLargeTitles = true }
To transition back to large titles .
Observe the attached snapshots of how iOS 13 doing it with how iOS 12 is doing it, considering iOS 12 is the correct behavior.
iOS 13 :
iOS 12 :
A user changes the navigation bar's style, or UIBarStyle , by tapping the “Style” button to the left of the main page. This button opens an action sheet where users can change the background's appearance to default, black-opaque, or black- translucent.
What you're doing was always wrong. You should set prefersLargeTitles
to true
once for the navigation bar and never touch it again.
The way to change what each view controller does about large titles as it appears is that that view controller sets its own navigationItem
(in its viewDidLoad
) to have the desired largeTitleDisplayMode
. So if the first v.c. has .always
and the second has .never
everything will be smooth.
I had the same issue and had to place a NavigationItem on the second ViewController's storyboard. My NavigationItem was being created automatically by the segue and its prefersLargeTitle
in the viewDidLoad()
was not finished creating before the view appeared. Adding a NavigationItem to the storyboard fixed this issue and allowed me to set the prefersLargeTitle
in the storyboard's properties menu.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With