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 会立即弹出