是否可以在onLongPressGesture
上获取列表项视图的CGRect
?
struct ContentView: View {
var body: some View {
ScrollView {
LazyVStack {
ForEach((1...10), id: \.self) {
Text("\($0)")
.frame(height: 80)
.frame(maxWidth: .infinity)
.background(.yellow)
.onLongPressGesture {
// here I need to use the rectangle
}
}
}
}
}
}
一种选择是创建一个单独的列表项视图结构体,并在其中存储矩形的状态:
struct ItemView: View {
let value: Int
@State var rect: CGRect = .zero
var body: some View {
Text("\(value)")
.frame(height: 80)
.frame(maxWidth: .infinity)
.background(.yellow)
.background(GeometryReader { gp in
Color.clear.onAppear{
rect = gp.frame(in: .global)
}
})
}
}
但不幸的是,在当前的实现中,这不是一个选项,我需要在列表视图中存储坐标。
1条答案
按热度按时间4sup72z81#
使用
PreferenceKey
是可行的(感谢@jnpdx的建议)。如果其他人想知道如何做到这一点,下面是完整的实现: