ScrollView Scroll -Position ändert sich nicht, wenn sich die Bildlauf -ID von einem anderen Scrollview geändert hat
Posted: 23 May 2025, 01:18
Konzept Ich versuche zu erstellen, ist zwei Scrollviews, die miteinander synchronisieren. Wenn sich die Position in einem Scrollview ändert (über das Scrolling), wird die Position in Second Scrollview ebenfalls ändert. Wenn Sie beim Drücken zufälliger albalscrollid festlegen, aktualisieren beide ScrollViews in derselben Position wie erwartet.
Code: Select all
import SwiftUI
struct Album: Identifiable{
let id = UUID()
let name: String
}
struct ScrollContentView: View {
@State var albumScrollId: Album.ID?
@State var albums: [Album] = []
var body: some View {
VStack{
Button("Scroll random"){
albumScrollId = albums.randomElement()?.id
}.buttonStyle(.borderedProminent).padding()
Scroller(albumScrollId: $albumScrollId, albums: albums)
Scroller(albumScrollId: $albumScrollId, albums: albums)
}.onAppear{
albums = [
Album(name: "1"),
Album(name: "2"),
Album(name: "3")
]
albumScrollId = albums[0].id
}
}
}
struct Scroller: View {
@Binding var albumScrollId: Album.ID?
let albums: [Album]
var body: some View {
VStack{
Text("\(albumScrollId?.uuidString ?? "")")
ScrollView(.horizontal){
HStack(spacing: 0){
ForEach(albums){album in
Text("album: \(album.name)").font(.title)
.containerRelativeFrame(.horizontal, alignment: .center)
}
} .scrollTargetLayout()
}.scrollTargetBehavior(.paging)
.scrollIndicators(.never)
.scrollPosition(id: $albumScrollId, anchor: .center)
}
}
}