很高兴在这里发表我的第一个问题!
我已经在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")
}
}
}
根据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
}