Swift version: 5.0
If you need to make broad changes to UIKit components, the UIAppearance proxy is your friend: you can treat it like an instance of any given UIKit type, except the changes you make there apply to all new instances of that type. Note: it applies to new instances of that, and won’t change any existing instances you have created.
For example, if you want all navigation bars to have a red background color regardless of where they appear in your app, you could put this into the
didFinishLaunching method of your app delegate:
UINavigationBar.appearance().barTintColor = .red
For more precise changes you can use
appearance(whenContainedInInstancesOf:) and specify a container appearance proxy. For example, you might want to make bar button items one color when they appear in navigation bars and another color when they appear in toolbars:
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .green UIBarButtonItem.appearance(whenContainedInInstancesOf: [UIToolbar.self]).tintColor = .red
While that’s easy to do, I hope you at least choose better colors!
Available from iOS 5.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.