当视图出现时(例如,当您从导航链接导航回来时(,我正试图将滚动重置到页面顶部。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")
}
}
}
当前api不允许使用此类功能。希望下周能改变这种状况。
同时,您可以实现此解决方法:https://developer.apple.com/forums/thread/127737
它的工作原理是通过清除数据来强制重新绘制视图。
为了让你的榜样发挥作用,你必须进行
- 创建
@State
变量
@State var data = Array(0..<10)
- 将
ForEach
替换为
ForEach(data, id: .self)
- 在
onAppear
中更改代码
到
.onAppear {
data = []
DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
data = Array(1..<10)
}