如何在 iOS 13 之前访问 UIImage 暗黑外观。

3

我刚刚为我的应用程序添加了深色模式。

Asset目录支持每个资源的多个外观,在iOS 13上,这意味着当系统运行在深色或浅色模式下时使用正确的资源。

xcode image asset catalog appearances 这些不是我的真实资源

我正在尝试支持旧版本的iOS的深色模式。 在我的尝试中,我已经添加了一个覆盖来强制使用深色模式,它适用于我的自定义颜色和主题,但并不适用于图像。

在iOS13之前,是否可以通过编程方式访问图像的dark外观?

对于iOS12,我尝试使用以下方法:

if #available(iOS 12.0, *) {
    let traits = UITraitCollection(userInterfaceStyle: .dark)
    let image = UIImage(
        named: "Image", 
        in: bundle, 
        compatibleWith: traits
    )
}

这仅返回正常外观,而方法命名似乎表明这仅检查我传递的特征集合是否与图像兼容。

1个回答

5
据我所知,只使用一个资源无法实现此功能。在iOS 13以下版本中,系统将始终采用“任何”外观。您需要创建两个不同名称的图像集,并选择其中之一。这有点令人困惑,因为UIUserInterfaceStyle可在iOS 12+中使用,但这很可能是因为macOS在那一年推出了Dark Mode。

我认为你可能是对的,我已经花了大部分下午尝试各种访问“dark”变体的方法,甚至UIImageAsset也无法帮助我。真是悲伤的时光。 - Wez
1
是的,很遗憾它不支持向后兼容。我建议尽可能使用可染色图像,因为这样更容易改变颜色。 - Frank Rupprecht
谢谢,是的,我们大部分的图标都是简单的,只有一些图形比较复杂。暂时接受这种方式,因为似乎这是唯一的方法。 - Wez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接