Recentemente comecei a trabalhar com SwiftUI. Deixe-me explicar minha ideia: tenho uma visualização que me permite adicionar itens a uma lista. Esta lista deve ser exibida dentro de uma visualização. O problema é que posso exibi-lo internamente, mas não consigo rolar ou deslizar para acionar a ação .onDelete. Como posso conseguir isso?
Aqui está a visualização com a lista:
import SwiftUI
struct ListInsideScontrino: View {
@State private var isAddFoodViewPresented = false
@EnvironmentObject var foodData: FoodData
var foodItems: [MyFoodItem] {
foodData.foodItems
}
var body: some View {
if foodItems.isEmpty {
VStack {
Text("Il riepilogo del tuo ordine apparirà qui una volta aggiunte le varie pietanze.")
.font(.callout)
.foregroundColor(.gray)
.multilineTextAlignment(.center)
.padding()
Text("Clicca il bottone in basso a destra ed inizia ad aggiungere il cibo!")
.font(.callout)
.foregroundColor(.gray)
}
.padding()
} else {
List {
ForEach(foodData.foodItems) { foodItem in
FoodItemRow(foodItem: foodItem)
.listRowSeparator(.hidden)
}
.onDelete(perform: deleteFoodItem)
}
.listStyle(InsetGroupedListStyle())
.background(Color.gray.opacity(0.100))
}
Color.gray.opacity(0.100)
}
private func deleteFoodItem(at offsets: IndexSet) {
foodData.foodItems.remove(atOffsets: offsets)
}
}
#Preview {
ListInsideScontrino()
}
Esta é a visualização onde quero mostrar minha lista:
import SwiftUI
struct ScontrinoView: View {
var body: some View {
ZStack {
ListInsideScontrino()
}
.padding()
.mask(
Path { path in
path.move(to: CGPoint(x: 0, y: 0))
for i in 0..<Int(UIScreen.main.bounds.height / 20) {
let x = CGFloat(i) * 20
path.addLine(to: CGPoint(x: x + 10, y: 30))
path.addLine(to: CGPoint(x: x + 20, y: 20))
}
path.addLine(to: CGPoint(x: UIScreen.main.bounds.width, y: UIScreen.main.bounds.height))
path.addLine(to: CGPoint(x: 0, y: UIScreen.main.bounds.height))
}
.scaleEffect(CGSize(width: 1.0, height: -1.0))
)
.shadow(radius: 5)
//.frame(maxWidth: .infinity, maxHeight: .infinity)
.cornerRadius(15)
.ignoresSafeArea()
}
}
Peço desculpas pelos erros, sou italiano e posso ter escrito algo errado.
Obrigado a todos pelas respostas!
Tentei trocar visualizações entre ScrollView, ZStack ecc.
Aqui está uma solução sem
.mask
apenas colocar o caminho do scontrino e a lista em um arquivoZStack
. Você só precisa tornar o fundo da lista invisível com.scrollContentBackground(.hidden)
Saudações à Itália