与Swift Charts BarMark bar shape when stacked相关
我试图在一个带有堆叠值的BarMark上应用剪辑形状,结果是它应用的形状为每个堆叠项,而不是整个条。
我想实现的目标:
我得到了什么:
我注意到角半径应用于整个酒吧,但仅应用于酒吧的顶部:
有没有办法在堆叠时得到这个胶囊形状?我的代码是:
enum Value: Int, Hashable, CaseIterable {
case ftb
case nb
case remaining
var color: Color {
switch self {
case .ftb:
return .tint1
case .nb:
return .tint2
case .ramaining:
return .gray4
}
}
}
@ViewBuilder var barChart: some View {
Chart {
ForEach(dates, id: \.self) { date in
let incomeSummary = incomeSummaries.first(where: { $0.date?.inSameDay(as: date) == true })
ForEach(Value.allCases, id: \.self) { value in
barMark(for: value, date: date, incomeSummary: incomeSummary)
.foregroundStyle(value.color)
}
// .cornerRadius(20, style: .continuous)
// .clipShape(Capsule())
}
}
.chartXAxis {
AxisMarks(values: dates) { date in
AxisValueLabel(format: .dateTime.weekday(), centered: true)
}
}
.chartYAxis {
AxisMarks { mark in
AxisValueLabel()
}
}
}
private func barMark(for value: Value, date: Date, incomeSummary: IncomeSummary?) -> BarMark {
let amount = amount(for: value, in: incomeSummary)
return BarMark(x: .value("WeekDay",
date,
unit: .day,
calendar: Calendar.localTime),
y: .value("Income", amount))
}
另一个问题:我注意到,当AxisValueLabel居中时,最后一个条形图会丢失它的标签。是虫子吗?
1条答案
按热度按时间vm0i2vca1#
我会尝试以下…
但是由于SwiftUI不支持圆化特定的角,RoundedCorners需要是一个虚构的视图。