SwiftUI ForEach 刷新使视图弹出

Posted

技术标签:

【中文标题】SwiftUI ForEach 刷新使视图弹出【英文标题】:SwiftUI ForEach refresh makes view pop 【发布时间】:2020-05-24 15:11:08 【问题描述】:

我有这样的事情:


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 上?当在Overview 中省略id: \.self 时,它不会显示这种行为。

【问题讨论】:

【参考方案1】:

是的,这是因为一切都得到了刷新,因此详细视图和导航链接将不再存在,因此应用程序“跳转”回根视图

“正常”的解决方案是:不要删除详细视图中的项目,而是删除列表中的项目 - 这样就没有问题,您也可以从 SwiftUI 免费获得漂亮的动画

【讨论】:

以上是关于SwiftUI ForEach 刷新使视图弹出的主要内容,如果未能解决你的问题,请参考以下文章

如何在数组大小更改后刷新 ForEach 显示元素的数量(SwiftUI,Xcode 11 Beta 5)

SwiftUI:VStack 中 ForEach 中的 HStack 使多行文本重叠

SwiftUI:如果在 ForEach 中使用 NavigationLink 会立即弹出

通过更改 SwiftUI 中的 @State 变量来刷新视图不起作用

SwiftUI 将几何阅读器与 ForEach 结合使用

如何使 SwiftUI 滚动视图缩小到内容?