На элементы в представлении списка влияет применение matchedGeometryEffect к представлениям внутри представления списка — SwiftUI
Я пытаюсь перейти от основного вида ко второму с использованием анимации, но по какой-то причине, если я применю его непосредственно к одному видимому элементу, остальные скроются. Если я применю непосредственно кList
все элементы отображаются, и я получаю анимацию, когда она перемещается во второй вид, но это не тот эффект, который мне нужен. Я получаю лучший эффект, когда применяю его к .
Есть идеи, почему большинство элементов в списке исчезают, когда я подаю заявку?.matchedGeometryEffect
кText(item.name)
?
Контентвиев
struct ContentView: View {
@State var showEditView = false
@State var selectedItem:Item?
@Namespace var editViewAnaimation
let items = [Item(name: "Fork", symbolName: "fork.knife"),
Item(name: "Hammer", symbolName: "hammer.fill"),
Item(name: "Lightbulb", symbolName: "lightbulb.fill")]
var body: some View {
VStack {
if showEditView{
Button(action: {
withAnimation{
showEditView.toggle()
}
}, label: {
Image(systemName: "xmark.square.fill")
.foregroundColor(Color.red)
})
EditView( editViewAnaimation: editViewAnaimation, selectedItem: selectedItem!)
}else{
List(items, id:\.self){ item in
HStack{
Image(systemName: item.symbolName)
.foregroundColor(Color.red)
Text(item.name)
.foregroundColor(Color.blue)
/// some items disappear when applied here, why?
//.matchedGeometryEffect(id: "name", in: editViewAnaimation)
}
.onTapGesture {
selectedItem = item
withAnimation{
showEditView.toggle()
}
}
}
/// all items show when applied here but not the effect I want
.matchedGeometryEffect(id: "name", in: editViewAnaimation)
}
}
}
}
ИЗМЕНИТЬ ВИД
struct EditView: View {
var editViewAnaimation: Namespace.ID
let selectedItem:Item
@State var nameInput = ""
var body: some View {
ScrollView{
TextField("name", text: $nameInput)
.textFieldStyle(RoundedBorderTextFieldStyle())
.matchedGeometryEffect(id: "name", in: editViewAnaimation)
}
.padding()
.onAppear{
nameInput = selectedItem.name
}
}
}