I'm experiencing a problem where my NavigationLink hangs when on the same view as a somewhat complicated chart.
Additional Context:
My Swift Chart has a fair number of data points (2000+).
I'm also doing custom modification using the .chartYAxis modifier.
.chartYAxis {
AxisMarks(values: .stride(by: 1)) { value in
AxisGridLine()
AxisTick()
// In my app I also put a value label here, but that doesn't seem to be the thing in particular that slows this down.
}
}
When I do this modifier along with having a big set of data points, if I have a NavigationLink elsewhere on the same view, it hangs when I press the NavigationLink. Notably, if I remove this modifier, it doesn't hang. (By hang I mean it takes about 1s to navigate to the next view).
Here's a slightly contrived example that mirrors my actual app, minus the generation of data points:
import SwiftUI
import Charts
struct ContentView: View {
var body: some View {
NavigationStack {
NavigationLink(value: "NavigationKey") {
Text("Link")
}
ChartView()
Text("Main View")
.navigationDestination(for: String.self) { path in
SomeView()
}
}
}
}
struct ChartView: View {
var chartXY: [(x: Double, y: Double)] {
var entries: [(x: Double, y: Double)] = []
for i in 0..<2500
let y = Double.random(in: 0..<8000)
entries.append((x: Double(i), y: y))
}
return entries
}
var body: some View {
List {
Chart {
ForEach(chartXY, id: \.x) {
LineMark(x: .value("x", $0.x), y: .value("y", $0.y))
}
}
.frame(minHeight: 100.0)
// Commenting out this block == no hang
.chartYAxis {
AxisMarks(values: .stride(by: 1)) { value in
AxisGridLine()
AxisTick()
// In my app I also put a value label here, but that doesn't seem to be the thing in particular that slows this down.
}
}
}
}
}
struct SomeView: View {
var body: some View {
Text("hello")
}
}
Presumably, given commenting out the block solves the problem, SwiftUI is preparing some large amounts of AxisMarks/GridLines/AxisTicks for the view transition. Is there someway for me to indicate that it shouldn't do that to prevent this problem? Or is there some other reason this would be hanging?