滚动列表时SwiftUI崩溃

时间:2019-11-29 00:01:19

标签: list scroll swiftui tabview

很高兴在这里发布我的第一个问题!

我已经在SwiftUI上玩了几周了,在一个更大的项目中,我发现了以下错误。

如果您具有TabView并在其中包含一个列表,并且尝试在滚动动画发生时尝试更改选项卡,则该应用将崩溃,并显示致命错误:“线程1:信号SIGABRT”。

控制台

  • BugTest [11830:362796]前提条件失败:属性无法设置初始值:98

您遇到过这个吗?我有什么办法可以解决这个问题而无需将列表更改为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")
        }
    }
}

2 个答案:

答案 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")
    }
}

}