Swiftui 将ScrollView位置重置到页面顶部

Swiftui 将ScrollView位置重置到页面顶部,swiftui,swiftui-scrollview,Swiftui,Swiftui Scrollview,我试图在出现视图时(例如,当您从导航链接导航回页面时)将滚动条重置到页面顶部。ScrollView嵌入在带有大标题的NavigationView中 使用下面的代码,我可以使用ScrollViewReader和scrollTo将滚动重置为页面上的第一个元素 但是,我希望视图能够一直滚动到顶部,这样大的导航栏标题就会重新出现。相反,我只看到内联标题 有没有更好的方法来重置滚动,使其转到页面的最顶端并显示大的导航栏标题 import SwiftUI struct ContentView: View

我试图在出现视图时(例如,当您从导航链接导航回页面时)将滚动条重置到页面顶部。ScrollView嵌入在带有大标题的NavigationView中

使用下面的代码,我可以使用
ScrollViewReader
scrollTo
将滚动重置为页面上的第一个元素

但是,我希望视图能够一直滚动到顶部,这样大的导航栏标题就会重新出现。相反,我只看到内联标题

有没有更好的方法来重置滚动,使其转到页面的最顶端并显示大的导航栏标题

import SwiftUI

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            ScrollView {
                ScrollViewReader { value in
                    ForEach(0..<10) { i in
                        HStack {
                            Spacer()
                            NavigationLink(destination: Text("Destination"), label: { Text("\(i)") })
                                .padding(.bottom, 100)
                            Spacer()
                        }
                        .id(i)
                    }
                    .onAppear() {
                        value.scrollTo(0)
                    }
                }
            }
            .navigationBarTitle("Scroll Test")
        }
    }
}
导入快捷界面
结构ContentView:View{
var body:一些观点{
导航视图{
滚动视图{
ScrollViewReader{中的值

ForEach(0..目前api不允许此类功能。希望下周能改变这一点

同时,您可以实施此解决方案:

它的工作原理是通过清除数据强制视图重新绘制

为了让你的榜样发挥作用,你必须

  • 创建一个
    @State
    变量,如
  • @State var data=Array(0。。
    
    .onAppear {
        data = []
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
            data = Array(1..<10)
        }