很高兴在这里发布我的第一个问题!
我已经在SwiftUI上玩了几周了,在一个更大的项目中,我发现了以下错误。
如果您具有TabView并在其中包含一个列表,并且尝试在滚动动画发生时尝试更改选项卡,则该应用将崩溃,并显示致命错误:“线程1:信号SIGABRT”。
控制台:
您遇到过这个吗?我有什么办法可以解决这个问题而无需将列表更改为ForEach?
提前谢谢!
代码:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
list()
.tabItem {
Image(systemName: "doc")
.font(.system(size: 25))
}
Text("Testing the bug")
.tabItem {
Image(systemName: "list.dash")
.font(.system(size: 25))
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct list: View {
var body: some View {
List(0..<50){_ in
Text("test")
}
}
}
答案 0 :(得分:0)
根据this post,发生错误是因为列表中的项目不符合Identifiable
协议。
struct ContentView: View {
var body: some View {
TabView {
list()
.tabItem {
Image(systemName: "doc")
.font(.system(size: 25))
}
Text("Testing the bug")
.tabItem {
Image(systemName: "list.dash")
.font(.system(size: 25))
}
}
}
}
struct list: View {
var elements: [CustomInt] = []
init() {
for i in 0...1000{
elements.append(CustomInt(text:String(i)))
}
}
var body: some View {
List(elements){element in
Text(element.text)
}
}
}
struct CustomInt: Identifiable{
var id = UUID()
var text:String
}
答案 1 :(得分:0)
这应该有效
struct ContentView: View {
var body: some View {
TabView {
VStack {
List {
.tabItem {
Image(systemName: "doc")
.font(.system(size: 25))
}
Text("Testing the bug")
.tabItem {
Image(systemName: "list.dash")
.font(.system(size: 25))
}
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct list: View {
var body: some View {
List(0..<50){_ in
Text("test")
}
}
}