具有绑定的视图会导致AnchorReference在SwiftUI中返回nil

具有绑定的视图会导致AnchorReference在SwiftUI中返回nil,swiftui,Swiftui,我正在和SwiftUI的主持人合作。以下代码正确向上发送首选项: struct BoundsPreferenceKey: PreferenceKey { typealias Value = Anchor<CGRect>? static var defaultValue: Value = nil static func reduce( value: inout Value, nextValue: () -> Value

我正在和SwiftUI的主持人合作。以下代码正确向上发送首选项:

struct BoundsPreferenceKey: PreferenceKey {
    typealias Value = Anchor<CGRect>?

    static var defaultValue: Value = nil

    static func reduce(
        value: inout Value,
        nextValue: () -> Value
    ) {
        value = nextValue()
    }
}

struct ExampleView: View {
    
    @State var text = "Hello World"
    
    var settings = ["Option 1","Option 2"]
    @State var mapChoioce = 0
    
    var body: some View {
        VStack {
            Text(text)
                .anchorPreference(key: BoundsPreferenceKey.self,value: .bounds) { $0 }
        }
   
        .overlayPreferenceValue(BoundsPreferenceKey.self) { preferences in

            GeometryReader { geometry -> AnyView? in
                
                print("Preference")
                print(preferences)
                
                return preferences.map {
                    AnyView( Rectangle()
                        .stroke()
                        .frame(
                            width: geometry[$0].width,
                            height: geometry[$0].height
                        )
                        .offset(
                            x: geometry[$0].minX,
                            y: geometry[$0].minY
                        )
                    )
                }
            }
        }
    }
}

这回答了你的问题吗?注意这里的
boundsReferenceKey
。@Asperi,干杯,这很有效。尽管如此,这看起来确实像是一种变通方法。你会说SwiftUI不应该返回零吗?这回答了你的问题吗?注意这里的
boundsReferenceKey
。@Asperi,干杯,这很有效。尽管如此,这看起来确实像是一种变通方法。你认为SwiftUI不应该返回零吗?
struct ExampleView: View {
    
    @State var text = "Hello World"
    
    var settings = ["Option 1","Option 2"]
    @State var mapChoioce = 0
    
    var body: some View {
        VStack {
            Text(text)
                .anchorPreference(key: BoundsPreferenceKey.self,value: .bounds) { $0 }
            
            Picker("Options", selection: $mapChoioce) {
                ForEach(0 ..< settings.count) { index in
                    Text(self.settings[index])
                }
            }
            .pickerStyle(SegmentedPickerStyle())
        }
   
        .overlayPreferenceValue(BoundsPreferenceKey.self) { preferences in

            GeometryReader { geometry -> AnyView? in
                
                print("Preference")
                print(preferences)
                
                return preferences.map {
                    AnyView( Rectangle()
                        .stroke()
                        .frame(
                            width: geometry[$0].width,
                            height: geometry[$0].height
                        )
                        .offset(
                            x: geometry[$0].minX,
                            y: geometry[$0].minY
                        )
                    )
                }
            }
        }
    }
}