Here is a simple macOS demo app that compares using a SwiftUI List and a LazyVStack. I prefer to use a LazyVStack because it's easier to customize the style. But it seems some of the built-in functionality is missing, such as reordering list items (as shown below)
import SwiftUI
class MyData: ObservableObject{
@Published var items = ["One", "Two", "Three", "Four", "Five"]
}
struct ContentView: View {
@StateObject var model = MyData()
var body: some View {
HStack{
//--- List ---
VStack{
Text("List")
.fontWeight(.bold)
List{
ForEach(model.items, id: \.self){ item in
Text(item)
}
.onMove(perform: move)
}
}
//--- LazyVStack ---
VStack{
Text("LazyVStack")
.fontWeight(.bold)
ScrollView {
LazyVStack {
ForEach(model.items, id: \.self){ item in
Text(item)
}
.onMove(perform: move)
}
}
}
}
}
//Reorder List
func move(from source: IndexSet, to destination: Int) {
model.items.move(fromOffsets: source, toOffset: destination )
}
}
The reordering of items works fine in the List example. But nothing happens in the LazyVStack.
Is there a way to get the .onMove functionality to work in the LazyVStack instance? Or do I have to implement a full bevy of custom .onDrag stuff with NSItemProvider?
