Динамичный UIImage для светлой и темной темы (оформления)

Есть следующий класс:

class ImageBundle {
    let light: UIImage?
    let dark: UIImage?
    let adaptive: UIImage?
    
    init(light: UIImage?, dark: UIImage?) {
        self.light = light
        self.dark = dark
        if #available(iOS 13.0, *), let light = self.light, let dark = self.dark, let appDelegate = UIApplication.shared.delegate as? AppDelegate, let currentUserInterfaceStyle = appDelegate.window?.traitCollection.userInterfaceStyle {
            self.adaptive = currentUserInterfaceStyle == .dark ? dark : light
            self.adaptive?.imageAsset?.register(currentUserInterfaceStyle == .dark ? light : dark, with: UITraitCollection(traitsFrom: [.current, .init(userInterfaceStyle: currentUserInterfaceStyle == .dark ? .light : .dark)]))
        } else {
            adaptive = nil
        }
    }
    
    convenience init(light: String, dark: String) {
        self.init(light: UIImage(named: light), dark: UIImage(named: dark))
    }
    
    convenience init(single: UIImage) {
        self.init(light: single, dark: single)
    }
    
    func currentImage() -> UIImage? {
        if #available(iOS 13.0, *) {
            if let adaptive = adaptive {
                return adaptive
            }
            return light
        } else {
            return ThemeViewModel.shared.theme == .dark ? dark : light
        }
    }
}

Благодаря ему я получаю UIImage для текущей темы (светлой/темной). Конкретно в iOS 13 и 14 наблюдаются проблемы - adaptive независимо от темы всегда возвращает изображение для светлой темы. В iOS 15 работает все как задумано - изображение меняется в зависимости от темы. Не могу понять, я делаю что-то не так или это не работает в 13 и 14 iOS?


Ответы (0 шт):