在第一个索引处向集合中插入新元素时,如何使用 PageTabViewStyle 修饰符更新 TabView 中的 SwiftUI 的 ForEach
How to update SwiftUI's ForEach in a TabView with PageTabViewStyle modifier when inserting a new element to the collection at first index
在 TabView
和 [=33= 中使用 ForEach
时,这是一个非常具体的问题]PageTabViewStyle
修饰符.
每次我在数组开头插入一个元素时,我的应用程序都会崩溃。
我得到一个
attempt to delete item 11 from section 0 which only contains 11 items before the update
错误。
在 canvas 中它也崩溃了。
最后的常规附加工作正常,当我删除 PageTabViewStyle 修饰符时它也工作。
如果我需要详细说明或有任何问题,请告诉我。
更新:我似乎在 iOS 15 这个问题已经解决,我的代码可以工作。我仍然希望找到 iOS 14 解决方法。
我用一个简单的单页应用重现了这个问题:
import SwiftUI
struct SwiftUIView: View {
@State var myArray: [String] = ["C", "D", "E", "F", "G"]
var body: some View {
VStack {
Button("Insert before", action: {
myArray.insert("A", at: 0)
})
TabView {
ForEach(myArray, id: \.self) { value in
Text("\(value)")
}
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
这里是针对 Xcode 12.5 / iOS 14.5.
的测试解决方法
TabView {
ForEach(myArray, id: \.self) { value in
Text("\(value)")
}
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
.id(myArray.count) // << here !!
在 TabView
和 [=33= 中使用 ForEach
时,这是一个非常具体的问题]PageTabViewStyle
修饰符.
每次我在数组开头插入一个元素时,我的应用程序都会崩溃。
我得到一个
attempt to delete item 11 from section 0 which only contains 11 items before the update
错误。
在 canvas 中它也崩溃了。
最后的常规附加工作正常,当我删除 PageTabViewStyle 修饰符时它也工作。
如果我需要详细说明或有任何问题,请告诉我。
更新:我似乎在 iOS 15 这个问题已经解决,我的代码可以工作。我仍然希望找到 iOS 14 解决方法。
我用一个简单的单页应用重现了这个问题:
import SwiftUI
struct SwiftUIView: View {
@State var myArray: [String] = ["C", "D", "E", "F", "G"]
var body: some View {
VStack {
Button("Insert before", action: {
myArray.insert("A", at: 0)
})
TabView {
ForEach(myArray, id: \.self) { value in
Text("\(value)")
}
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
这里是针对 Xcode 12.5 / iOS 14.5.
的测试解决方法TabView {
ForEach(myArray, id: \.self) { value in
Text("\(value)")
}
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
.id(myArray.count) // << here !!