首页 > 解决方案 > 使用 scrollViewReader 时 SwiftUI ScrollView 滚动太远

问题描述

我正在创建一个应用程序,我在分页视图中呈现数据,每个视图都包含一个垂直滚动列表,由 scrollView 启用。我还使用 scrollViewReader 能够以编程方式滚动到列表中的特定位置。这在大多数情况下都可以,但是当我以编程方式滚动到列表底部(到最后一项)时,它滚动得太远了。

我已经隔离了一个可重复的案例:

ScrollView(.vertical, showsIndicators: false) {
    ScrollViewReader { scrollView in
        LazyVStack(alignment: .leading) {
            ForEach((1..<100) , id:\.self) { key in
                Text("Hello \(key)")
            }
            
        }
        .onAppear {
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                withAnimation {
                    scrollView.scrollTo(99, anchor: .center)
                    
                }
            }
            
        }
    }
}

如果您在例如 iPhone 12 模拟器上运行此程序,您将确保列表中的最后一项最终位于屏幕中间。如果您手动滚动并释放,列表将“下降”到屏幕底部,这是我希望列表具有的位置,即使我使用 滚动到最后一项.anchor: .center

有没有办法解决这种行为?

编辑:意识到我不够清楚。只要我的视图中有更多可滚动的内容,我就希望锚点为 .center。但是当我到达列表的底部时,我希望 scrollView 足够聪明,知道它不能再滚动了。就像现在一样,如果您手动滚动,它会滚动更多。

标签: iosswiftuiswiftui-scrollview

解决方案


推荐阅读