我本以为这在 SwiftUI 中是微不足道的,但显然不是。
想象一个项目列表,每个项目都有一些文本,在 ScrollView 或滚动的东西(可能是 VStack)中。该列表将离开屏幕,以便用户可以滚动查看底部。
我也希望能够通过拖动项目来重新排序该列表。让我们假设一秒的延迟,然后您才能“拾取”该项目,然后拖动以重新排序。延迟是为了不与滚动冲突。并且拖动的项目应该看起来与未拖动的项目完全相同(除了阴影或轮廓或其他东西)
这可以用 SwiftUI 实现吗?
尝试在
List
上使用 .onMove
和 ForEach
回调:
struct ContentView: View {
@State private var rows: [Int] = Array(1...100)
var body: some View {
List {
ForEach(rows, id: \.self) { i in
Text("Row \(i)")
}
.onMove { fromOffsets, toOffset in
rows.move(fromOffsets: fromOffsets, toOffset: toOffset)
}
}
}
}