Estou tentando criar uma lista de elementos não retangulares, cada um dos quais tem um menu de contexto. No entanto, estou encontrando um problema com os cantos ao executar um pressionamento longo.
Qual é a maneira correta de usar tal combinação? Não quero usar List por causa do estilo padrão. O problema ocorre apenas enquanto a animação está em andamento.
processo de animação pressionado longamente
Aqui está um exemplo de código simplificado que pode ser copiado, colado e executado em um arquivo. O vídeo foi gravado no dispositivo com iOS 18.2
import SwiftUI
@main
struct MyApp: App {
var body: some Scene { WindowGroup { TestView() } }
}
struct TestView: View {
let items = ["Item 1", "Item 2", "Item 3"]
var body: some View {
VStack {
ForEach(items, id: \.self) { item in
HStack {
Text(item)
Spacer()
Image(systemName: "star")
}
.padding()
.background(.yellow)
// tried all these in different combinations, none works
.contentShape(RoundedRectangle(cornerRadius: 10))
.clipShape(RoundedRectangle(cornerRadius: 10))
.containerShape(RoundedRectangle(cornerRadius: 10))
.contextMenu {
Button { print("Edit \(item)") }
label: { Text("Edit"); Image(systemName: "pencil") }
}
}
}
.padding()
}
}
#Preview { TestView() }
Basta usar o
contentShape(_:_:eoFill:)
inicializador, certificando-se de especificar umContentShapeKinds
de.contextMenuPreview
: