SwiftUI
SwiftUI 차트 날짜 사이에 생기는 빈 공간 해결방법
박신혁
2024. 9. 7. 23:00
//임시 데이터
let ex: [CalorieData] = [
CalorieData(date: Date(timeIntervalSinceNow: -10 * 24 * 60 * 60), calorie: 1450), //10일 전
CalorieData(date: Date(timeIntervalSinceNow: -5 * 24 * 60 * 60), calorie: 1550), // 5일 전
CalorieData(date: Date(timeIntervalSinceNow: -4 * 24 * 60 * 60), calorie: 1600), // 4일 전
CalorieData(date: Date(timeIntervalSinceNow: -3 * 24 * 60 * 60), calorie: 1480), // 3일 전
CalorieData(date: Date(timeIntervalSinceNow: -2 * 24 * 60 * 60), calorie: 1520), // 2일 전
CalorieData(date: Date(timeIntervalSinceNow: -1 * 24 * 60 * 60), calorie: 1470), // 1일 전
CalorieData(date: Date(), calorie: 1490) // 오늘
]
//차트
Chart{
ForEach(ex, id: \.date){ item in
BarMark(x: .value("Date", item.date,unit: .day), y:.value("Calorie", item.calorie))
.annotation {
Text("\(Int(item.calorie))")
.font(.system(size: 12, weight: .medium))
}
}
}
.chartXAxis{
AxisMarks(values: .stride(by: .day))
}
.frame(height:150)
차트를 다루던 중 한 가지 문제가 생겼다.
임시 데이터처럼 날짜 사이에 데이터가 없어도 차트 X축에 표시가 돼 보기 불편해진다.
이유는 정확하게는 찾지 못했지만 아마 Date 데이터는 자동으로 일정한 간격을 넣어주는 거 같다.
해결 방법
//차트
Chart{
ForEach(ex, id: \.date){ item in
BarMark(x: .value("Date", formattedDate(date: item.date)), y:.value("Calorie", item.calorie))
.annotation {
Text("\(Int(item.calorie))")
.font(.system(size: 12, weight: .medium))
}
}
}
.frame(height:150)
// 포맷 함수
func formattedDate(date: Date) -> String {
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd" //원하는 포맷 형태로 수정하고 싶으면 이 부분을 수정
return formatter.string(from: date)
}
생각보다 매우 간단하게 해결 가능했다 결국 Date를 사용해 생긴 문제니
Date를 String과 같이 구분 할 수 있는 다른 값으로 바꿔주면 된다.
728x90