1

在具有 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

4

0 回答 0