На элементы в представлении списка влияет применение 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
        }
    }
}

0 ответов

Другие вопросы по тегам