我在SwiftUI中使用图表框架时遇到了一些问题。一切都按预期绘制,但x轴没有显示每个点的日期。Y轴正常工作,并沿着Y轴显示权重值。dateCompleted的类型为Date()。
Chart(exerciseMaxRepsArray) { e in
LineMark(x: .value("Date", e.dateCompleted),
y: .value("Reps", e.reps)
)}
我试过使用dateFormatter并将其绘制为字符串,我试过指定
LineMark(x: .value("Date", e.dateCompleted, unit: .day),
y: .value("Reps", e.reps))}
但是没有任何东西可以显示日期值。我已经确保日期被填充,并且框架足够大,所以它们不会被剪切掉。任何帮助都将非常感谢。谢谢!!!
下面是模拟器中的图形:simulator screen
编辑日期:
GroupBox(label: Text("Daily Max Reps"){
Chart(exerciseMaxRepsArray) { e in
LineMark(x: .value("Date", e.dateCompleted, unit: .day),
y: .value("Reps", e.reps)
) }
.chartYAxisLabel(position: .trailing, alignment: .center) {
Text("Reps")
}
.chartXAxisLabel(position: .bottom, alignment: .center) {
Text("Date")
}
.padding()
} .groupBoxStyle(BackgroundGroupBoxStyle())
编辑:
//
// ExerciseDetailView.swift
// WorkoutTrackerTrial
//
// Created by Rachel Scott on 12/7/22.
//
import SwiftUI
import Charts
struct ExerciseDetailView: View {
@FetchRequest var exercisesets: FetchedResults<ExerciseSet>
var exercise: String
init(exercise: String) {
self.exercise = exercise
self._exercisesets = FetchRequest(
entity: ExerciseSet.entity(),
sortDescriptors: [],
predicate: NSPredicate(format: "exercisename == %@", exercise as any CVarArg)
)
}
var exerciseMaxRepsArray: [ExerciseSet] {
var seenDates: Set<Date> = []
return exercisesets
.sorted { $0.reps > $1.reps } // you can skip this line if already sorted by weight in the @fetchrequest
.filter { seenDates.insert($0.dateCompleted.startOfDay).inserted }
.sorted { $0.dateCompleted < $1.dateCompleted }
}
var body: some View {
if #available(iOS 16.0, *) {
ZStack{
CustomColor.backgroundColor.edgesIgnoringSafeArea(.all)
// for weights on that day, return from largest to smallest and use highest from that day
VStack {
Text(exercise)
.font(Font.custom("Montserrat-SemiBold", size: 24))
.foregroundColor(CustomColor.darkGreen)
.background(CustomColor.backgroundColor)
GroupBox(label: Text("Daily Max Reps")
.font(Font.custom("Montserrat-SemiBold", size: 18))
.foregroundColor(CustomColor.darkGreen)) {
Chart(exerciseMaxRepsArray) { e in
LineMark(x: .value("Date", e.dateCompleted, unit: .day),
y: .value("Reps", e.reps)
).foregroundStyle(CustomColor.lightGreen)
}
.chartYAxisLabel(position: .trailing, alignment: .center) {
Text("Reps")
.font(Font.custom("Montserrat-Medium", size: 16))
.foregroundColor(CustomColor.darkGreen)
}
.chartXAxisLabel(position: .bottom, alignment: .center) {
Text("Date")
.font(Font.custom("Montserrat-Medium", size: 16))
.foregroundColor(CustomColor.darkGreen)
}
.padding()
} .groupBoxStyle(BackgroundGroupBoxStyle()) //.background(CustomColor.backgroundColor)
}
}
}
}
}
1条答案
按热度按时间vptzau2j1#
它对我来说很好用,可以在模型数据代码中添加一些东西吗?
下面是我的工作示例: