iOS 11 prefersLargeTitles not updating until scroll

Solution 1:

I recently hit the same issue and none of the suggestions worked for me. Instead, all I needed to do was to invoke sizeToFit(). Sample code:

private func configureNavigator() {
    guard let navigationController = navigationController else { return }
    navigationController.navigationBar.prefersLargeTitles = true
    navigationItem.largeTitleDisplayMode = .automatic
    navigationController.navigationBar.sizeToFit()
}

I hope this helps!

Solution 2:

For me the only working solution is:

DispatchQueue.main.async { [weak self] in
    self?.navigationController?.navigationBar.sizeToFit()
}

in

viewWillAppear()

Solution 3:

I had the same issue only on one tableview ...

I had to set :

self.tableView.contentInsetAdjustmentBehavior = .never

so that my tableview stop scrolling when uiviewcontroller was loaded.

It's the tableview automatic scrolling that makes the large title being hidden

Hope this helps

Solution 4:

I had the same problem. Although you are not using Storyboards but I hope this could help someone. I checked "Prefer Large Titles" for the Navigation Controller (not the View Controller) I embedded my TableViewController in. All the View Controllers after the Navigation Controller turned and had large titles, and it should work.