Swift -Diagramme: So verhindern Sie, wie Scroll -Positionssprung beim Laden mehr Daten dynamisch laden
Posted: 23 Feb 2025, 12:49
Ich implementiere unendlich scrollen mit Swift -Diagrammen, in denen zusätzliche historische Daten beim Scrollen am Anfang des Datensatzes laden. Wenn jedoch neue Daten geladen werden, springt die Bildlaufposition des Diagramms unerwartet. Datenpunkte mit den neuesten 5 < /li>
Wenn Sie nach hinten mit nur 3 Punkten außerhalb des Bildschirms nach hinten scrollen, wird das Laden von 10 weiteren historischen Punkten ausgelöst < /li>
Nachdem Laden, die Bildlaufposition springt in die 3. Position des neuen Datensatzes, anstatt die aktuelle Ansicht beizubehalten.
Die Bildlaufposition sollte stabil bleiben, wenn neue Daten geladen werden. ul>
Hier ist meine Implementierungslogik mit einigen Mockdaten: < /p>
Wenn Sie nach hinten mit nur 3 Punkten außerhalb des Bildschirms nach hinten scrollen, wird das Laden von 10 weiteren historischen Punkten ausgelöst < /li>
Nachdem Laden, die Bildlaufposition springt in die 3. Position des neuen Datensatzes, anstatt die aktuelle Ansicht beizubehalten.
Die Bildlaufposition sollte stabil bleiben, wenn neue Daten geladen werden. ul>
Hier ist meine Implementierungslogik mit einigen Mockdaten: < /p>
Code: Select all
import SwiftUI
import Charts
struct DataPoint: Identifiable {
let id = UUID()
let date: Date
let value: Double
}
class ChartViewModel: ObservableObject {
@Published var dataPoints: [DataPoint] = []
private var isLoading = false
init() {
loadMoreData()
}
func loadMoreData() {
guard !isLoading else { return }
isLoading = true
let newData = self.generateDataPoints(
endDate: self.dataPoints.first?.date ?? Date(),
count: 10
)
self.dataPoints.insert(contentsOf: newData, at: 0)
self.isLoading = false
print("\(dataPoints.count) data points.")
}
private func generateDataPoints(endDate: Date, count: Int) -> [DataPoint] {
var points: [DataPoint] = []
let calendar = Calendar.current
for i in 0..