1

这是一个简单的macOS演示应用程序,它使用 SwiftUIListLazyVStack. 我更喜欢使用 aLazyVStack因为它更容易自定义样式。但似乎缺少一些内置功能,例如重新排序列表项(如下所示)

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 )
  }
}

在此处输入图像描述

在示例中,项目的重新排序工作正常List。但在LazyVStack.

有没有办法让.onMove功能在LazyVStack实例中工作?还是我必须用 来实现一整套定制的.onDrag东西NSItemProvider

4

0 回答 0