在具有 iOS15 的 SwiftUI 流的 SwiftUI 应用程序中,我试图减慢 ScrollViewReader 滚动速度的动画。很明显,在下面的示例中,滚动不需要 100 秒。虽然这个例子中的动画看起来不错,但在真正的应用程序中,我以编程方式调用 scrollTo ,它几乎是立即的,而且看起来很生涩。我错过了什么吗?
这是一个例子:
struct ListView: View {
let colors: [Color] = [.red, .green, .blue]
@State private var shouldChangeRow: Bool = false
@State private var number: Int = 100
var body: some View {
VStack {
ScrollViewReader { proxy in
List {
ForEach(0..<number) { i in
Text("Row \(i)")
.font(.title)
.frame(minWidth: 0, maxWidth: .infinity)
.frame(height: 50)
.background(colors[i % colors.count])
.id(i)
}//for each
}//list
.onChange(of: shouldChangeRow) { _ in
withAnimation(Animation.easeInOut(duration: 100)) {
proxy.scrollTo(Int.random(in: 0..<number), anchor: .top)
}
}//on change
}//reader
.frame(height: 500)
Button("Change") {
withAnimation {
shouldChangeRow.toggle()
}
}
.buttonStyle(.borderedProminent)
.padding()
}//v
}
}
任何指导将不胜感激。Xcode 13.2.1,iOS 15