【问题标题】:Why swipeActions modifier does not work with List container directly? #SwiftUI为什么 swipeActions 修饰符不能直接与 List 容器一起使用? #SwiftUI
【发布时间】:2023-03-29 05:29:01
【问题描述】:

新引入的 swipeActions 修饰符不能直接与显示排列的数据行的 List 容器一起使用。但是,如果我使用 ForEach(一种从已识别数据的基础集合中按需计算视图的结构),它就可以正常工作。

以下代码不起作用并显示 swipeActions

struct SwipeButtonDemoView: View {
  let listItems = WWDCViewModel().sessions
  var body: some View {
    NavigationView {
      VStack {
        Spacer()
        List(listItems) {  session in
            HStack {
              Image(systemName: "play")
              Text(session.title)
                .font(.callout)
            }
            .swipeActions(edge: .leading) {
              Button {
                print("Bookmark")
              } label: {
                Label("Bookmark", systemImage: "bookmark")
              }.tint(.indigo)
            }
          }
          .listRowSeparator(.hidden)
          }
      .listStyle(.inset)
      .navigationTitle("WWDC 21")
    }
  }
}

以下代码有效并显示 swipeActions..

struct SwipeButtonDemoView: View {
  let listItems = WWDCViewModel().sessions
  var body: some View {
    NavigationView {
      VStack {
        Spacer()
        
        List {
          ForEach(listItems) { session in
            HStack {
              Image(systemName: "play")
              Text(session.title)
                .font(.callout)
            }
            .swipeActions(edge: .leading) {
              Button {
                print("Bookmark")
              } label: {
                Label("Bookmark", systemImage: "bookmark")
              }.tint(.indigo)
            }
          }
          .listRowSeparator(.hidden)
          }
        }
      .listStyle(.inset)
      .navigationTitle("WWDC 21")
    }
  }
}

为什么它不能直接与 List 一起使用?但是,它可以与 ForEach 一起按预期工作!!!

【问题讨论】:

    标签: ios swift swiftui swiftui-list


    【解决方案1】:

    您是对的,在 Xcode 13 beta 1 中,swipeActions 不能应用于 List 的内部块声明,因此您的示例的这个版本不起作用:

    List(listItems) { session in
      HStack {
        Image(systemName: "play")
        Text(session.title)
          .font(.callout)
      }
      .swipeActions(edge: .leading) {
        // etc
      }
    }
    

    似乎有一个有效的用例可以为这样的List 声明提供滑动操作,因此值得使用反馈助手向 Apple 提出建议。

    【讨论】:

      猜你喜欢
      • 2021-05-08
      • 2020-03-29
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      相关资源
      最近更新 更多