首页 > 解决方案 > SwiftUI 动画错误?

问题描述

我在使用 macOS Montery 3 和 Xcode 13 Beta 3 时遇到了这个奇怪的问题,我在List's 和动画中遇到了这个错误:

[General] Row index 0 out of row range (numberOfRows: 0) for <SwiftUIListCoreOutlineView: 0x133885000>

这有点难以解释,但这里有一个简单的复制:

最小可重现示例

  1. 创建一个新的 SwiftUI macOS 应用程序
  2. 粘贴此代码:
struct ContentView: View {
    @State var items = ["Item"]
    
    @ViewBuilder var mainView: some View {
        if items.isEmpty {
            Text("Im empty")
        }
        else {
            List(items, id: \.self) {s in
                Text(s)
            }
        }
    }
    var body: some View {
        NavigationView {
            mainView
                .toolbar {
                    Button(action: {
                        withAnimation {
                            items.removeAll()
                        }
                    }) {
                        Image(systemName: "minus")
                    }
                }
            Text("Second")
        }
    }
}
  1. 运行应用程序,然后尝试调整侧边栏的大小。(你应该能够)
  2. 然后按工具栏上的减号按钮。这只是删除了所有项目
  3. 然后,应该打破侧边栏的大小调整。您可能还会在控制台中遇到一堆错误。

有没有人能够重现这个问题,它是 SwiftUI 中的一个错误吗?

标签: swiftmacosswiftui

解决方案


有同样的行为。如果我删除“withAnimation”,代码运行良好。或者将“items.removeAll()”放在“withAnimation”之外


推荐阅读