SwiftUICharts条形图颜色无法修改问题求助
问题:SwiftUICharts 条形图颜色设置不生效
我正在开发一款带图表功能的watchOS应用,由于需要兼容至watchOS 7,而系统自带的Swift Charts仅支持watchOS 9及以上版本,因此选用了第三方库SwiftUICharts。目前已成功实现图表展示并完成部分自定义,但遇到一个问题:无法修改条形图的颜色。
我设置条形图为紫色,但实际显示为红色,且我的应用中并未使用过红色。以下是简化后的代码示例:
struct ChartView: View { var items: [TimeEntry] = [ TimeEntry(dateString: "01/23/2023", entry: 97, timestamp: Date().millisecondsSince1970)] var body: some View { let chartData = makeData(items) BarChart(chartData: chartData) .touchOverlay(chartData: chartData) .padding() } private func makeData(_ items: [TimeEntry]) -> BarChartData { var data: [BarChartDataPoint] = [BarChartDataPoint]() for item in items { let stat = BarChartDataPoint( value: Double(item.entry), xAxisLabel: "Wed", date: Date(milliseconds: item.timestamp), colour: ColourStyle(colour: Color.purple) ) data.append(stat) } let dataSet = BarDataSet(dataPoints: data) return BarChartData(dataSets: dataSet) } }
附带图表截图:
问题原因及解决方法
SwiftUICharts中,BarDataSet会默认使用自身的颜色设置覆盖单个BarChartDataPoint的颜色配置,这就是你设置了紫色却显示红色(库默认颜色)的原因。
解决方法1:给BarDataSet统一设置颜色
修改makeData方法,在创建BarDataSet时指定颜色样式,这样整个数据集的条形都会使用该颜色:
private func makeData(_ items: [TimeEntry]) -> BarChartData { var data: [BarChartDataPoint] = [BarChartDataPoint]() for item in items { let stat = BarChartDataPoint( value: Double(item.entry), xAxisLabel: "Wed", date: Date(milliseconds: item.timestamp) ) data.append(stat) } // 为数据集设置紫色 let dataSet = BarDataSet(dataPoints: data, colourStyle: ColourStyle(colour: .purple)) return BarChartData(dataSets: dataSet) }
解决方法2:保留单个数据点的自定义颜色
如果需要不同数据点使用不同颜色,需确保BarDataSet没有设置统一的colourStyle,同时检查代码中是否有其他覆盖颜色的配置。另外注意,watchOS上的颜色渲染可能存在细微差异,确保使用的Color是系统支持的类型。
此外,你的代码存在一处小错误:原代码中Date(milliseconds: entry.timestamp)应为Date(milliseconds: item.timestamp),已在上述示例中修正。
内容的提问来源于stack exchange,提问作者Neglected Sanity
相关产品推荐
相关产品推荐

