swipeActions(edge:allowsFullSwipe:content:)
声明
func swipeActions<T>(
edge: HorizontalEdge = .trailing,
allowsFullSwipe: Bool = true,
content: () -> T
) -> some View where T : View
参数
edge
与滑动操作相关联的视图边。默认值为
HorizontalEdge/trailing
。allowsFullSwipe
一个布尔值,指示完全滑动是否自动执行第一个操作。默认值为
true
。content
滑动动作的内容。
详述
使用此方法将滑动操作添加到充当列表中的一行的视图。指示滑动操作的起始位置 HorizontalEdge
,并使用 Button
实例定义各个操作。例如,如果您有一个消息列表,您可以添加一个操作以在从前沿滑动时将消息切换为未读,以及在后沿滑动时删除或标记消息的操作:
List {
ForEach(store.messages) { message in
MessageCell(message: message)
.swipeActions(edge: .leading) {
Button { store.toggleUnread(message) } label: {
if message.isUnread {
Label("Read", systemImage: "envelope.open")
} else {
Label("Unread", systemImage: "envelope.badge")
}
}
}
.swipeActions(edge: .trailing) {
Button(role: .destructive) {
store.delete(message)
} label: {
Label("Delete", systemImage: "trash")
}
Button { store.flag(message) } label: {
Label("Flag", systemImage: "flag")
}
}
}
}
}
操作按您列出的顺序显示,从滑动的起始边开始。在上面的示例中,删除操作出现在最靠近屏幕后沿的位置:
对于出现在滑动操作中的标签或图像,SwiftUI 会自动应用 SymbolVariants/fill-swift.type.property
符号变体,如上所示。
默认情况下,用户可以针对给定的滑动方向执行第一个操作,并完全滑动。对于上面的示例,用户可以通过完全滑动来执行切换未读和删除操作。您可以通过将 allowsFullSwipe
参数设置为 false
来选择退出此行为。例如,您可以禁用前沿上的完全滑动:
.swipeActions(edge: .leading, allowsFullSwipe: false) {
Button { store.toggleUnread(message) } label: {
if message.isUnread {
Label("Read", systemImage: "envelope.open")
} else {
Label("Unread", systemImage: "envelope.badge")
}
}
}
当您使用 ButtonRole
枚举中的值之一为按钮设置角色时,SwiftUI 根据其角色设置按钮的样式。在上面的示例中,删除操作出现在 ShapeStyle/red
中,因为它具有 ButtonRole/destructive
角色。如果您想设置不同的颜色——例如,为了匹配应用程序 UI 的整体主题——将 View/tint(_:)
修饰符添加到按钮:
MessageCell(message: message)
.swipeActions(edge: .leading) {
Button { store.toggleUnread(message) } label: {
if message.isUnread {
Label("Read", systemImage: "envelope.open")
} else {
Label("Unread", systemImage: "envelope.badge")
}
}
.tint(.blue)
}
.swipeActions(edge: .trailing) {
Button(role: .destructive) { store.delete(message) } label: {
Label("Delete", systemImage: "trash")
}
Button { store.flag(message) } label: {
Label("Flag", systemImage: "flag")
}
.tint(.orange)
}
上面代码中的修改使切换未读操作 ShapeStyle/blue
和标志操作 ShapeStyle/orange
:
添加滑动操作时,SwiftUI 不再合成在 ForEach
实例上使用 ForEach/onDelete(perform:)
方法时出现的删除操作。如果合适,您将负责在滑动操作中创建删除操作。
如果您在同一个列表行视图上多次调用修饰符,则针对给定边的操作会累积。
可用版本
相关用法
- Swift Optional symbolVariant(_:)用法及代码示例
- Swift Optional saturation(_:)用法及代码示例
- Swift Optional submitLabel(_:)用法及代码示例
- Swift Optional speechAlwaysIncludesPunctuation(_:)用法及代码示例
- Swift Optional submitScope(_:)用法及代码示例
- Swift Optional scaledToFill()用法及代码示例
- Swift Optional searchCompletion(_:)用法及代码示例
- Swift Optional safeAreaInset(edge:alignment:spacing:content:)用法及代码示例
- Swift Optional simultaneousGesture(_:including:)用法及代码示例
- Swift Optional shadow(color:radius:x:y:)用法及代码示例
- Swift Optional sheet(item:onDismiss:content:)用法及代码示例
- Swift Optional scaledToFit()用法及代码示例
- Swift Optional scenePadding(_:)用法及代码示例
- Swift Optional scaleEffect(_:anchor:)用法及代码示例
- Swift Optional scaleEffect(x:y:anchor:)用法及代码示例
- Swift Optional sheet(isPresented:onDismiss:content:)用法及代码示例
- Swift Optional popover(isPresented:attachmentAnchor:arrowEdge:content:)用法及代码示例
- Swift Optional mask(alignment:_:)用法及代码示例
- Swift Optional listSectionSeparatorTint(_:edges:)用法及代码示例
- Swift Optional badge(_:)用法及代码示例
- Swift Optional fullScreenCover(isPresented:onDismiss:content:)用法及代码示例
- Swift Optional keyboardType(_:)用法及代码示例
- Swift Optional clipShape(_:style:)用法及代码示例
- Swift Optional preferredColorScheme(_:)用法及代码示例
- Swift Optional background(_:ignoresSafeAreaEdges:)用法及代码示例
注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional swipeActions(edge:allowsFullSwipe:content:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。