为啥 swipeActions 修饰符不能直接与 List 容器一起使用? #SwiftUI
Posted
技术标签:
【中文标题】为啥 swipeActions 修饰符不能直接与 List 容器一起使用? #SwiftUI【英文标题】:Why swipeActions modifier does not work with List container directly? #SwiftUI为什么 swipeActions 修饰符不能直接与 List 容器一起使用? #SwiftUI 【发布时间】:2021-06-16 06:04:47 【问题描述】:新引入的 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 一起按预期工作!!!
【问题讨论】:
【参考方案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 提出建议。
【讨论】:
以上是关于为啥 swipeActions 修饰符不能直接与 List 容器一起使用? #SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章
java - 为啥在java中可以具有默认修饰符的类不能受到保护