我有一个视图可以被拖动并放置在其他视图 (比如分类) 上面。为了检测我当前在哪个分类视图上方,我将它们的位置信息存储在一个 frames 数组中,这是通过他们不可见的覆盖层的 onAppear 函数实现的 (基于 Paul Hudson 在此教程中的实现)。
这种方法十分有效,但是当这些视图的位置改变时,比如设备方向改变或 iPad 窗口大小改变时,就会出现问题。这当然不会触发 onAppear 函数,所以它们的位置信息不再匹配。
HStack() {
ForEach(categories) { category in
ZStack {
Circle()
Rectangle()
.foregroundColor(.clear)
.overlay(
GeometryReader { geo in
Color.clear
.onAppear {
categoryFrames[index(for: category)] = geo.frame(in: .global)
}
}
)
}
}
}
有任何更新这些实例的帧或以不同方式观察它们的想法都将受到欢迎。