使用 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 足够智能,知道不能再滚动了。就像现在一样,如果您手动滚动,它会滚动得更多。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...