我在玩.position(x:y:)CoordinateSpace.global,遇到了让我困惑的事情。
我试图确定全局坐标空间中ZStack的原点的坐标。但是,当我在这些坐标上放置一个点时,该点未与ZStack的左上角对齐。
这是我使用的代码:

struct Test: View {
    var body: some View {
        ZStack {
            Image(systemName: "circle.fill")
                .resizable()
                .frame(width: 5, height: 5)
                .foregroundColor(.red)
                .position(x: 177, y: 423)  // This is from 'frame.origin.x' and 'frame.origin.y'

            ZStack {  // Trying to determine this ZStack's coordinates in the global coordinate space
                GeometryReader { geometry -> AnyView in  // Used to retrieve the coordinates using `geometry` and then returning a Text so I can see the coordinates on screen
                    let frame = geometry.frame(in: CoordinateSpace.global)
                    return AnyView(Text("\(frame.origin.x), \(frame.origin.y)").fixedSize(horizontal: false, vertical: true))
                }
            }
            .frame(width: 60, height: 60)
        }
    }
}
这是点出现的位置:
ios - SwiftUI中 View 的“来源”在哪里-LMLPHP
有人知道为什么它应该出现在ZStack的左上方时才出现在那个奇怪的地方吗?我以为原点应该在视图的左上方?

最佳答案

您可以通过几何读取器在全局坐标空间中计算框架,但是将图像放置在外部ZStack坐标空间中,这就是为什么放错位置的原因。
为了使其按预期工作(接受用于测试目的的硬编码坐标),应在一个坐标空间中进行坐标处理。
这是一个解决方案
ios - SwiftUI中 View 的“来源”在哪里-LMLPHP

var body: some View {
    ZStack {
        Image(systemName: "circle.fill")
            .resizable()
            .frame(width: 5, height: 5)
            .foregroundColor(.red)
            .position(x: 177, y: 379)  // This is from 'frame.origin.x' and 'frame.origin.y'

        ZStack {
            GeometryReader { geometry -> AnyView in
                let frame = geometry.frame(in: .named("test"))               // << here !!
                return AnyView(Text("\(frame.origin.x), \(frame.origin.y)")
                    .fixedSize(horizontal: false, vertical: true))
            }
        }
        .frame(width: 60, height: 60)
    }.coordinateSpace(name: "test")       // << here !!
}

关于ios - SwiftUI中 View 的“来源”在哪里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62737434/

10-10 01:30