How to use Light UIUserInterfaceStyle image version in Dark Mode?

2.1k views Asked by At

I use image, this image has two versions for light and dark UIUserInterfaceStyle, but I need to use the image light version in one UIViewController when Dark Mode is on. I know I can use tintColor, but I want to find out if other ways to do this.

2

There are 2 answers

0
Frank Rupprecht On BEST ANSWER

Subramanian's answer is perfect for this use case.

However, I you really need just the UIImage in a different style, you can do the following:

// create a trait collection with `light` interface style
let traitCollection = UITraitCollection(userInterfaceStyle: .light)

// If you have an existing image, you can change it's style like this: 
let lightImage = image.withConfiguration(traitCollection.imageConfiguration)

// Or if you load the image by name, you can do this:
let lightImage = UIImage(named: "imageName", in: nil, compatibleWith: traitCollection)
2
Subramanian Mariappan On

You can opt out of dark mode for a particular view controller by setting the overrideUserInterfaceStyle property in viewDidLoad function. Sample snippet as follows.

override func viewDidLoad() {
        super.viewDidLoad()

        // Always adopt a light interface style.    
        overrideUserInterfaceStyle = .light
    }

To opt out dark mode for your image view you can set as follows.

imageview. overrideUserInterfaceStyle = .light

You can check out further about opt out of dark mode from the link below. Hope it helps.

https://developer.apple.com/documentation/xcode/supporting_dark_mode_in_your_interface/choosing_a_specific_interface_style_for_your_ios_app