【问题标题】:Resetting ScrollView position to the top of the page将 ScrollView 位置重置到页面顶部
【发布时间】:2021-06-05 20:01:04
【问题描述】:

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

使用下面的代码,我可以使用ScrollViewReaderscrollTo 将滚动重置到页面上的第一个元素。

但是,我希望视图一直滚动到顶部,以便重新出现大型导航栏标题。相反,我只看到内联标题。

有没有更好的方法来重置滚动到页面的最顶部并显示大导航栏标题?

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")
        }
    }
}

【问题讨论】:

    标签: swiftui swiftui-scrollview


    【解决方案1】:

    目前 api 不允许这样的功能。希望下周能改变这种情况。

    同时您可以实施此解决方法:https://developer.apple.com/forums/thread/127737

    它通过清除数据来强制视图重绘来工作。

    为了让你的例子起作用,你必须

    1. 创建@State 变量,如

    @State var data = Array(0..&lt;10)

    1. 将您的ForEach 替换为

    ForEach(data, id: \.self)

    1. onAppear 中更改您的代码

    .onAppear {
        data = []
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
            data = Array(1..<10)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多