SwiftUI ForEach刷新使视图弹出

时间:2020-05-24 15:11:08

标签: swift swiftui

我有这样的东西:


import SwiftUI

struct Overview: View {

    @ObservedObject var firstArray = FirstArray()

    var body: some View {
        Group{
            ScrollView(){
                ForEach(self.firstArray.array, id: \.self){ array in
                    SubView(array: array)
                }
                Spacer()
            }
        }.navigationBarTitle("Overview")
    }
}


struct SubView: View {

    @State var array

    var body: some View {
           NavigationLink(destination: DetailInfo(array: array){
                Image(systemName: "pencil.circle").resizable().frame(width: 30, height: 30)
            }
    }.navigationBarTitle("SubView")
}


struct DetailInfo: View {

    @State var array

    var body: some View {
        List(){
            ForEach(0..<self. array.count, id: \.self){item in
                Text(item)
            }.onDelete(perform: deleteItem)
        }
    }

    func deleteItem(at offsets: IndexSet) {
       self.array.remove(atOffsets: offsets)
    }

}

当我删除DetailInfo中的项目时,它将弹出我回到Overview。这是为什么?是因为Overview中的ForEach“刷新”。我如何留在DetailInfo上?在id: \.self中遗漏Overview时,不会显示此行为。

1 个答案:

答案 0 :(得分:1)

是的,这是因为所有内容都会刷新,因此详细视图和导航链接将不再存在,因此应用程序“跳转”回了根视图

“常规”解决方案是:不要在详细信息视图中删除项目,而是在列表中-那么就没有问题,而且SwiftUI也免费提供了不错的动画