我正在SwiftUI中使用ForEach创建一个自定义列表。我的目标是做一个滑动删除手势,而不是将ForEach嵌入到列表中。
这是我目前为止的代码:
import SwiftUI
struct ContentView: View {
let list = ["item1", "item2", "item3", "item4", "item5", "item6"]
var body: some View {
VStack {
List{
ForEach(list, id: \.self) { item in
Text(item)
.foregroundColor(.white)
.frame(maxWidth: .infinity)
.padding()
.background(Color.red)
.cornerRadius(20)
.padding()
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我似乎找不到一个手势,将允许我做一个滑动删除,而不使用列表视图。
我还想做一个自定义删除按钮是什么显示当用户滑动一个项目向左(如下图)。
3条答案
按热度按时间mwngjboj1#
这是我解决你问题的办法。您应该添加
DragGesture
并为每行创建offset
。请记住,由var
声明的变量不能被改变。你必须在之前添加@State
。wqlqzqxt2#
基于现有的解决方案:
1.添加了相同的行为滑动,因为它的列表与动画。
1.在代码中提供了注解,以清楚地理解那里发生了什么。
您可以更新顶部的所有常量为您的值,它会工作得很好。并且还可以将
.padding(.trailing, -40)
更新为您的值(默认情况下隐藏删除按钮)。您也可以轻松地将'onChange'移动到单独的方法
private func handleOnChangeGesture(_ gesture: DragGesture.Value, index: Int) {...paste code here...}
,并为'onEnd'提供相同的单独方法。tcbh2hod3#
我有点迟到了,但我最近为
Views
创建了一个简单的滑动手势extension
。据我测试,它工作得很好,适用于所有类型的Views
。这是整个事情的gist,如果你喜欢在Github上看到它。
这是您将用于将Swipe功能附加到视图的
View extension
:这是滑动背后的整个UI逻辑:
这里有一个例子,你可以如何使用整个事情:
可能有更好的方法来处理
animations
和offset
,但我对Swift相当陌生,所以这是我现在能做的最好的。