使用 GeometryProxy.named() 似乎总是匹配 .global 或 .local

问题描述

我正在 SwiftUI 中编写一个应用程序,我希望能够使用 GeometryReader 计算出我在应用程序顶部的 TextField 下方多远。但无论我尝试什么,我使用的 .coordinateSpace() 修饰符似乎总是与 .global.local 相同,如下面的示例代码所证明的那样,这会导致附加图像。

如您所见,所有 .named() 几何框架都与 .global.local 框架相同,这使我得出结论,我一定做错了什么,但我不能t为我的生活工作出什么。有人可以帮忙吗?

我正在使用 macOS 11.3.1 和 XCode 12.5 模拟 iOS 14.5。

import SwiftUI

struct ContentView: View {
    @State private var inputText = ""
        
    var body: some View {
        GeometryReader { fullView in
            NavigationView {
                vstack {
                    TextField("Enter text",text: $inputText)
                        .padding()
                        .coordinateSpace(name: "textField")
                    
                    List {
                        ForEach(0..<10) { item in
                            GeometryReader { geo in
                                HStack {
                                    Text("\(geo.frame(in: .global).midY,specifier: "%.0f")")
                                    Text("\(geo.frame(in: .local).midY,specifier: "%.0f")")
                                    Text("\(geo.frame(in: .named("textField")).midY,specifier: "%.0f")")
                                    Text("\(geo.frame(in: .named("geometry")).midY,specifier: "%.0f")")
                                    Text("\(geo.frame(in: .named("list")).midY,specifier: "%.0f")")
                                }
                            }
                            .coordinateSpace(name: "geometry")
                        }
                    }
                    .coordinateSpace(name: "list")
                }
                .navigationBarTitle("Test project")
            }
        }
    }
}

A screenshot of the Xcode Simulator showing an iPhone running the sample code in this project.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)