Ios 迅捷|和#xA0;从ScrollView获取当前滚动位置
使用新的Ios 迅捷|和#xA0;从ScrollView获取当前滚动位置,ios,swift,swiftui,xcode12,Ios,Swift,Swiftui,Xcode12,使用新的ScrolLViewReader,似乎可以通过编程方式设置滚动偏移量 但我想知道是否也可以获取当前滚动位置 似乎ScrollViewProxy只附带了scrollTo方法,允许我们设置偏移量 谢谢 可以在阅读之前阅读它。下面是一个基于视图首选项的解决方案 struct DemoScrollViewOffsetView: View { @State private var offset = CGFloat.zero var body: some View {
ScrolLViewReader
,似乎可以通过编程方式设置滚动偏移量
但我想知道是否也可以获取当前滚动位置
似乎ScrollViewProxy
只附带了scrollTo
方法,允许我们设置偏移量
谢谢 可以在阅读之前阅读它。下面是一个基于视图首选项的解决方案
struct DemoScrollViewOffsetView: View {
@State private var offset = CGFloat.zero
var body: some View {
ScrollView {
VStack {
ForEach(0..<100) { i in
Text("Item \(i)").padding()
}
}.background(GeometryReader {
Color.clear.preference(key: ViewOffsetKey.self,
value: -$0.frame(in: .named("scroll")).origin.y)
})
.onPreferenceChange(ViewOffsetKey.self) { print("offset >> \($0)") }
}.coordinateSpace(name: "scroll")
}
}
struct ViewOffsetKey: PreferenceKey {
typealias Value = CGFloat
static var defaultValue = CGFloat.zero
static func reduce(value: inout Value, nextValue: () -> Value) {
value += nextValue()
}
}
结构DemoScrollViewOffsetView:View{
@国家私有风险值偏移量=CGFloat.zero
var body:一些观点{
滚动视图{
VStack{
ForEach(0..Value){
value+=nextValue()
}
}
可以设置吗?@Asperi-如果我将
DemoScrollViewOffsetView
括在NavigationView{}
,在运行模拟器时,我在调试窗口中收到以下警告消息:绑定首选项ViewOffsetKey尝试每帧更新多次。
是什么导致了警告/错误以及如何解决?我是SwiftUI新手-此解决方案对我有效,但您能否对.backgr进行更多解释VStack
上的ound
修饰符?这只是为了获取滚动位置吗?谢谢。@Asperi如果不使用,为什么要声明offset var?这个问题可能重复: