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 Never saturation(_:)用法及代碼示例
- Swift Never simultaneousGesture(_:including:)用法及代碼示例
- Swift Never symbolVariant(_:)用法及代碼示例
- Swift Never scaledToFill()用法及代碼示例
- Swift Never safeAreaInset(edge:alignment:spacing:content:)用法及代碼示例
- Swift Never searchCompletion(_:)用法及代碼示例
- Swift Never sheet(isPresented:onDismiss:content:)用法及代碼示例
- Swift Never submitScope(_:)用法及代碼示例
- Swift Never scaleEffect(x:y:anchor:)用法及代碼示例
- Swift Never speechAlwaysIncludesPunctuation(_:)用法及代碼示例
- Swift Never submitLabel(_:)用法及代碼示例
- Swift Never sheet(item:onDismiss:content:)用法及代碼示例
- Swift Never scaleEffect(_:anchor:)用法及代碼示例
- Swift Never scaledToFit()用法及代碼示例
- Swift Never shadow(color:radius:x:y:)用法及代碼示例
- Swift Never suggestedFileName(_:)用法及代碼示例
- Swift Never scenePadding(_:)用法及代碼示例
- Swift Never pageCommand(value:in:step:)用法及代碼示例
- Swift Never opacity(_:)用法及代碼示例
- Swift Never colorMultiply(_:)用法及代碼示例
- Swift Never accessibilityAction(action:label:)用法及代碼示例
- Swift Never alert(isPresented:error:actions:message:)用法及代碼示例
- Swift Never confirmationDialog(_:isPresented:titleVisibility:actions:)用法及代碼示例
- Swift Never flipsForRightToLeftLayoutDirection(_:)用法及代碼示例
- Swift Never position(x:y:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Never swipeActions(edge:allowsFullSwipe:content:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。