struct Example: View {
private static let topId = "topIdHere"
/*
Use only for toggling, binding for external access or @State for internal access
*/
@Binding var shouldScrollToTop: Bool = false
var body: some View {
ScrollViewReader { reader in // read scroll position and scroll to
ScrollView {
VStack {
TopView() // << first view on top
.id(Self.topId) // << assigned id (use for scroll)
}
.onChange(shouldScrollToTop) { _ in
withAnimation { // add animation for scroll to top
reader.scrollTo(Self.topId, anchor: .top) // scroll
}
}
}
}
}
}
6条答案
按热度按时间vwhgwdsa1#
我认为目前最好的方法是使用View的id函数
1.声明一个具有唯一ID的状态变量
1.然后将id函数添加到ScrollView
无论何时更改该id(例如在按钮事件中),滚动视图都将从头重新构建,这就像滚动到顶部一样
kfgdxczn2#
在刚刚发布的
ScrollViewProxy
中。一个代理值,允许以编程方式滚动视图层次结构中的可滚动视图。-https://developer.apple.com/documentation/swiftui/scrollviewproxy
Xcode 12.0 beta (12A6159)
mdfafbf13#
从iOS 14开始,也许更早。
是这样吗?)
ix0qys7i4#
有一个变通方案可以通过在显示新内容之前隐藏所有内容来实现ScrollToTop()效果。
avkwfej45#
滚动到顶部的简单方法:
用法:
更改发布的布尔值"model. scrollToTopVar"时,ScrollView将滚动到顶部:)
zdwk9cvp6#
使用this解决方案(之前简化),我做了一个例子,当按下按钮时,将
ScrollView.content.offset
严格移动到顶部:如果这个例子合适,您必须改进
DragGesture