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?这个问题可能重复: