gpt4 book ai didi

xcode - 如何使用 SwiftUI 从 TabView 内的 ForEach 中删除项目?

转载 作者:行者123 更新时间:2023-12-04 12:32:01 26 4
gpt4 key购买 nike

我遇到了一个我不理解的奇怪的 SwiftUI 崩溃。我有一个 TabView,其中包含 3 个图像的列表。我试图通过点击屏幕上的按钮从列表中删除第一张图片,但我遇到了这个崩溃。
“NSInternalInconsistencyException”,原因:“尝试删除并重新加载相同的索引路径( {length = 2, path = 0 - 0})”
以 NSException 类型的未捕获异常终止
如果我从代码中删除 TabView,它会按预期工作并删除第一项。这是重现此崩溃所需的最少代码量。我还在此处创建了此代码的 Git 存储库 -> https://github.com/cameronhenige/TestCrash有人可以帮我弄清楚发生了什么吗?

import SwiftUI

struct ContentView: View {
@StateObject var testViewModel = TestViewModel()

var body: some View {
GeometryReader { proxy in

ScrollView {

VStack(alignment: .leading, spacing:0) {

TabView {

ForEach(testViewModel.images, id: \.self) { image in
Image(image)
}

}.tabViewStyle(PageTabViewStyle())
.clipShape(RoundedRectangle(cornerRadius: 15))
.padding()
.frame(width: proxy.size.width, height: proxy.size.height/2.5)

}
Button(action: {
testViewModel.removeFirst()
}) {
Text("Remove first item from list")
}

}


}.frame(maxWidth: .infinity).background(Color.black)
}
}
import Foundation

class TestViewModel: NSObject, ObservableObject {

@Published var images: [String] = ["dog", "cat", "bird"]

func removeFirst() {
images.remove(at: 0)
}
}

最佳答案

TabView {

ForEach(testViewModel.images, id: \.self) { image in
Image(image)
}

}.tabViewStyle(PageTabViewStyle())
.clipShape(RoundedRectangle(cornerRadius: 15))
.padding()
.frame(width: proxy.size.width, height: proxy.size.height/2.5).id(testViewModel.images.count)
向 TabView 添加 id 可解决此问题!

关于xcode - 如何使用 SwiftUI 从 TabView 内的 ForEach 中删除项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68417081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com