Fixing black artifact when changing large titles mode in iOS11

One of the new features of iOS 11 is the ability to display large headers in the navigation bar by setting the prefersLargeTitles property to true. You can set it for the whole app (using the UIAppearance for example) or differently for each view controller.

But there is a problem. If you navigate from a view controller with large titles enabled to a view controller with large titles disabled, you will see a black artifact under the change animation:

The black artifact comes from the navigation controller. If you set the backgroundColor of the navigation controller’s view to any, like red, it will replace the black artifact with an artifact of that color. The solution is to set the color of the color of you UI, white in my case:

Now the animation looks ok, no visible artifact. The problem is, you cannot set it globally using UIAppearance, so you can either set navigationController.view.backgroundColor = UIColor.white on every navigation controller in your app, or create a custom navigation controller inheriting from UINavigationController and use it everywhere where needed.

iOS  Swift 

See also