Swiftui 为什么VStack不能在带有scrollview的GeometryReader中工作?

Swiftui 为什么VStack不能在带有scrollview的GeometryReader中工作?,swiftui,geometryreader,Swiftui,Geometryreader,在没有GeometryReader的情况下,我使用vStack的scrollview工作正常(在AppleTV中-我没有在iOS中测试) 然后我添加了geometryreader,VStack像ZStack一样“崩溃” 我能做些什么来解决这个问题?(是的,我需要geometryreader;) struct ContentView:View{ @状态变量偏移量:CGFloat=0 var body:一些观点{ 滚动视图(.vertical,showsIndicators:false){ VSta

在没有GeometryReader的情况下,我使用vStack的scrollview工作正常(在AppleTV中-我没有在iOS中测试)

然后我添加了geometryreader,VStack像ZStack一样“崩溃”

我能做些什么来解决这个问题?(是的,我需要geometryreader;)

struct ContentView:View{
@状态变量偏移量:CGFloat=0
var body:一些观点{
滚动视图(.vertical,showsIndicators:false){
VStack(对齐:。前导){
GeometryReader{geometry->中的任意视图
设newOffset=geometry.frame(in:.global).minY
如果newOffset!=self.offset{
self.offset=newOffset
打印(“新偏移”,新偏移)
}
返回任意视图(
中的ForEach(0..AnyView
//设newOffset=geometry.frame(in:.global).minY
//如果newOffset!=self.offset{
//self.offset=newOffset
//打印(“新偏移”,新偏移)
//                    }
//返回任意视图(

ForEach(0..让我假设您最初想要它(并且它不会破坏ScrollView布局和滚动)

var主体:一些视图{
滚动视图(.vertical,showsIndicators:false){
VStack(对齐:。前导){
ForEach(0..Color in
设newOffset=geometry.frame(in:.global).minY
如果newOffset!=self.offset{
self.offset=newOffset
打印(“新偏移”,新偏移)
}
返回颜色。清除
}
)
}
}

这正是我想要的,谢谢你,你是我的英雄!;)
struct ContentView: View {

    @State var offset : CGFloat = 0

    var body: some View {
        ScrollView(.vertical, showsIndicators: false) {
            VStack(alignment: .leading) {
                GeometryReader { geometry -> AnyView in
                    let newOffset = geometry.frame(in: .global).minY
                    if newOffset != self.offset {
                        self.offset = newOffset
                        print("new offset",newOffset)
                    }
                    return AnyView (
                        ForEach (0..<5) { _ in
                            Text("umpf")
                        }
                    )
                }
            }
        }
    }
}
struct ContentView: View {

    @State var offset : CGFloat = 0

    var body: some View {
        ScrollView(.vertical, showsIndicators: false) {
            VStack(alignment: .leading) {
//                GeometryReader { geometry -> AnyView in
//                    let newOffset = geometry.frame(in: .global).minY
//                    if newOffset != self.offset {
//                        self.offset = newOffset
//                        print("new offset",newOffset)
//                    }
//                    return AnyView (
                        ForEach (0..<5) { _ in
                            Text("umpf")
                        }
            //        )
        //        }
            }
        }
    }
}
var body: some View {
    ScrollView(.vertical, showsIndicators: false) {
        VStack(alignment: .leading) {
            ForEach (0..<5) { _ in
                Text("umpf")
            }
        }.background(
            GeometryReader { geometry -> Color in
                let newOffset = geometry.frame(in: .global).minY
                if newOffset != self.offset {
                    self.offset = newOffset
                    print("new offset",newOffset)
                }
                return Color.clear
            }
        )
    }
}