You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS18 Beta真机Charts视图调用Assets自定义文本色报错问题

iOS 18 Beta真机上Charts视图中自定义文本色报错但显示正常的问题

问题现象

  • 访问Assets Catalog中的自定义颜色时,文本色显示正常,但控制台持续抛出错误:No color named '...' found in asset catalog for /private/var/containers/Bundle/Application/...
  • 仅在包含Charts框架的视图中出现该报错,应用内其他视图使用相同颜色资源无异常
  • 仅iOS 18 Beta真机触发,其他版本模拟器、正式版本真机均无此问题
  • 仅文本色(textColor)报错,背景色(bgColor)加载完全正常

相关代码

enum ColorPicked: Codable, CaseIterable, Identifiable {
    var id: String { return self.bgColor.description }
    case white
    case red
    
    var textColor: Color {
        switch self {
        case .red: return .textBetterRed
        case .white: return .textBetterWhite
        }
    }

    var bgColor: Color {
        switch self {
        case .white: return .betterWhite
        case .red: return .betterRed
        }
    }    
}

import SwiftUI
import Charts

struct Chart1: View {
    let data: [ChartData1]
    let color: ColorPicked
    
    var body: some View {
        ZStack{
            VStack(alignment: .leading){
                Text("Chart Title")
                    .foregroundStyle(color.textColor)
                // 省略其他视图代码
            }
            .background(color.bgColor)
        }
    }
}

问题分析

推测是iOS 18 Beta中SwiftUI与Charts框架的交互bug:foregroundStyle在Charts视图的上下文环境中,颜色资源的解析逻辑出现异常——虽然最终能正确加载颜色并渲染,但错误地触发了资源未找到的报错日志。而background的颜色解析路径不受Charts视图层级的影响,因此未出现误报。

解决方案

1. 显式初始化颜色资源

绕过自动解析的逻辑,手动通过资源名称或资源符号初始化Color,避免Charts视图上下文的解析异常:

var textColor: Color {
    switch self {
    case .red: return Color(named: "textBetterRed")!
    case .white: return Color(named: "textBetterWhite")!
    }
}

如果你的项目启用了资源符号生成(Asset Catalog的"Generate Swift Code"选项),也可以用类型安全的方式初始化:

var textColor: Color {
    switch self {
    case .red: return Color(resource: .textBetterRed)
    case .white: return Color(resource: .textBetterWhite)
    }
}

2. 提前缓存颜色实例

将颜色实例提前初始化并缓存,避免在Charts视图中重复触发解析逻辑:

enum ColorPicked: Codable, CaseIterable, Identifiable {
    var id: String { return self.bgColor.description }
    case white
    case red
    
    // 提前缓存颜色实例
    private static let textBetterRedCache = Color.textBetterRed
    private static let textBetterWhiteCache = Color.textBetterWhite
    private static let betterWhiteCache = Color.betterWhite
    private static let betterRedCache = Color.betterRed
    
    var textColor: Color {
        switch self {
        case .red: return Self.textBetterRedCache
        case .white: return Self.textBetterWhiteCache
        }
    }

    var bgColor: Color {
        switch self {
        case .white: return Self.betterWhiteCache
        case .red: return Self.betterRedCache
        }
    }    
}

3. 临时忽略错误日志

如果该报错不影响功能运行,可以暂时在Xcode的控制台过滤规则中添加No color named,屏蔽该误报日志,等待iOS 18 Beta后续版本修复此问题。

内容的提问来源于stack exchange,提问作者Fran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:12:37