我有可以拖放到其他视图(比如说类别)之上的视图。为了检测我位于哪个类别视图之上,我将它们的帧存储在帧数组中,这发生在它们不可见覆盖层的 onAppear 中。 (这是基于 Paul Hudson 在this教程)。
这一切都很好,除非这些视图的位置发生变化,例如在设备方向或在 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)
}
}
)
}
}
}
因此,任何关于如何在这些情况下更新帧或如何以不同方式观察它们的想法都将受到欢迎。
我遇到了类似的问题,这篇文章激励我寻找解决方案。所以也许这对其他人有用。
只需分配给onChange
修改与您所做的相同onAppear
并在以下情况下将其点燃geo.size
变化。
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)
}
.onChange(of: geo.size) { _ in
categoryFrames[index(for: category)] = geo.frame(in: .global)
}
}
)
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)