在第一个索引处向集合中插入新元素时,如何使用 PageTabViewStyle 修饰符更新 TabView 中的 SwiftUI 的 ForEach

Mar*_*ner 5 swift swiftui swiftui-foreach swiftui-tabview

ForEachTabViewwithPageTabViewStyle修饰符中使用时,这是一个非常具体的问题。

每次我在数组的开头插入一个元素时,我的应用程序都会崩溃。

我得到一个

尝试从更新前仅包含 11 个项目的部分 0 中删除项目 11

错误。

在画布中它也会崩溃。

最后的常规附加工作正常,当我删除 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 10

以下是针对 Xcode 12.5 / iOS 14.5 的测试解决方法。

TabView {
    ForEach(myArray, id: \.self) { value in
        Text("\(value)")
    }
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
.id(myArray.count)      // << here !!
Run Code Online (Sandbox Code Playgroud)