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

Swift Charts中如何将BarMark X轴今日日期标签改为蓝色

解决Swift Charts中单独高亮今日X轴标签的问题

要实现仅将X轴中今日日期的标签设为蓝色,核心是针对每个轴标记动态判断日期并设置颜色,具体修改如下:

  1. 在视图中添加日历实例和今日日期的计算属性(忽略时分秒,确保只比较年月日):
private let calendar = Calendar.current
private var today: Date {
    calendar.startOfDay(for: Date())
}
  1. 修改chartXAxis部分,通过AxisMarks的context获取当前标记的日期,判断是否为今日后再设置颜色:
.chartXAxis {
    AxisMarks(values: .stride(by: .day, count: 1)) { context in
        AxisTick()
        // 将context.value转为Date类型,判断是否与今日为同一天
        let isToday = calendar.isDate(context.value as! Date, inSameDayAs: today)
        AxisValueLabel(format: .dateTime.month().day())
            .foregroundStyle(isToday ? Color.blue : .primary)
    }
}

完整修改后的代码

struct DailyPointsChart: View {
    @Binding var scrollPosition: Date
    let chartData: [(Date, Int)]
    
    private let calendar = Calendar.current
    private var today: Date {
        calendar.startOfDay(for: Date())
    }
    
    var body: some View {
        Chart {
            ForEach(chartData, id: \.0) { data in
                BarMark(
                    x: .value("Day", data.0, unit: .day),
                    y: .value("Points", data.1)
                )
            }
            .cornerRadius(10)
            .foregroundStyle(Color(UIColor.purple))

        }
        .chartScrollableAxes(.horizontal)
        .chartXVisibleDomain(length: 3600 * 24 * 7) // 7 visible days on chart
        .chartScrollPosition(x: $scrollPosition)
        
        .chartXAxis {
            AxisMarks(values: .stride(by: .day, count: 1)) { context in
                AxisTick()
                let isToday = calendar.isDate(context.value as! Date, inSameDayAs: today)
                AxisValueLabel(format: .dateTime.month().day())
                    .foregroundStyle(isToday ? Color.blue : .primary)
            }
        }
    }
}

关键说明

  • 使用Calendar.isDate(_:inSameDayAs:)可以忽略日期中的时分秒部分,确保即使chartData中的日期包含具体时间,也能正确匹配今日。
  • .primary是系统默认的文本颜色,保证非今日标签保持原有样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:43:14