SwiftUI 自定义accentColor 不适用于物理设备(iOS 13),但适用于其他地方(iOS 14.0+)

Bib*_*cob 6 assets image colors swift swiftui

在我的 SwiftUI 中,View我有一个Image从资产加载的。我已将其设置foregroundColoraccentColor,我还在 asset 中将其设置为我的自定义AccentColor,该自定义将在整个应用程序中使用。

资产:

资产

内容视图主体:

var body: some View {
    Image("MyImageName")
        .resizable()
        .renderingMode(.template)
        .foregroundColor(.accentColor)
        .frame(width: 32, height: 32, alignment: .center)
}
Run Code Online (Sandbox Code Playgroud)

预览和模拟器显示右侧的图像foregroundColor。但是,当在物理设备上运行时,不知何故仍然保持手机的foregroundColor默认蓝色。accentColor

预览:

模拟器:

真实设备:

为什么会出现这种情况?如何确保AssentColor在不修改 iPhone 上任何设置的情况下,无论 iOS 版本如何,都能跨设备工作?调试详细信息:设备iOS版本为iOS 13.5.1和Xcode 12.0.1。

Bib*_*cob 2

因此,在进一步测试时,我发现尽管accentColor可以从 获得iOS 13.0,但定制accentColor只能从 获得iOS 14.0。因此,我创建了一个扩展来accentColor手动使用 from assetiOS 13并在上面正常工作iOS 14.0

extension Color {

    static var accent: Color {
        if #available(iOS 14.0, *) {
            return accentColor
        } else {
            return Color(#colorLiteral(red: 0.5, green: 0.5, blue: 0.5, alpha: 1))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)