Swift Charts中chartXVisibleDomain修饰符引发卡顿/崩溃问题求助
Xcode 15.0中Swift Charts使用chartXVisibleDomain导致卡顿/崩溃的解决办法
在Xcode 15.0(版本15A240d)环境下,使用Swift Charts的chartXVisibleDomain(length:)修饰符时,模拟器、Playground等场景都会出现卡顿甚至崩溃,移除该修饰符后一切恢复正常——这个问题不少开发者都碰到过,属于Xcode 15早期版本里Swift Charts框架的已知bug。
解决办法:
- 优先升级Xcode版本:苹果在Xcode 15.1及之后的正式版中已经修复了
chartXVisibleDomain相关的问题,直接升级到最新稳定版就能彻底解决。 - 临时替代方案(无法升级时):
手动计算需要展示的日期范围,用chartXScale(domain:)替代chartXVisibleDomain,针对你的代码可以这么改:
这种方式能实现类似固定可见长度的效果,同时避开崩溃问题。import SwiftUI import Charts struct ContentView: View { let data: [(day: Date, value: Int)] = [ (Calendar.current.date(byAdding: .day, value: 0, to: .now)!, 1), (Calendar.current.date(byAdding: .day, value: -1, to: .now)!, 2), (Calendar.current.date(byAdding: .day, value: -3, to: .now)!, 3), (Calendar.current.date(byAdding: .day, value: -10, to: .now)!, 4), (Calendar.current.date(byAdding: .day, value: -20, to: .now)!, 5) ] // 计算要展示的2天范围 private var visibleDomain: ClosedRange<Date> { let endDate = Date() let startDate = Calendar.current.date(byAdding: .day, value: -2, to: endDate)! return startDate...endDate } var body: some View { Chart(data, id: \.day) { (day, value) in BarMark( x: .value("Date", day, unit: .day), y: .value("Value", value) ) } .chartXScale(domain: visibleDomain) } }
问题根源是Xcode 15.0里的Swift Charts在处理日期轴的chartXVisibleDomain(length:)时,内部计算逻辑出现异常,导致UI线程阻塞或崩溃,后续版本的框架已经修复了这个漏洞。
内容的提问来源于stack exchange,提问作者Marcus Rossel
相关产品推荐
相关产品推荐

