Swift version: 5.10
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!
SPONSORED Get accurate app localizations in minutes using AI. Choose your languages & receive translations for 40+ markets!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 5.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.