SwiftUI 动画错误?

Posted

技术标签:

【中文标题】SwiftUI 动画错误?【英文标题】:SwiftUI Animation bug? 【发布时间】:2021-07-19 20:25:46 【问题描述】:

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

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

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

最小可重现示例

    创建一个新的 SwiftUI macOS 应用程序 粘贴此代码:
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")
        
    

    运行应用程序,然后尝试调整侧边栏的大小。 (您应该能够) 然后按工具栏上的减号按钮。这只是删除了所有项目。 然后,侧边栏的大小调整应该被打破。您可能还会在控制台中遇到一堆错误。

是否有人能够重现此问题,这是 SwiftUI 中的错误吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

是的。我想我会删除动画

以上是关于SwiftUI 动画错误?的主要内容,如果未能解决你的问题,请参考以下文章

选择后的 SwiftUI Picker 动画错误

如何修复适用于 SwiftUI 中文本的动画制作帧问题/错误?

SwiftUI 列表动画

在 SwiftUI 中将视图添加到层​​次结构时如何动画过渡

如何在 SwiftUI 的 ScrollView 中制作动画? SwiftUI 中的手风琴风格动画

SwiftUI Segmented Control 在视图刷新时选择段文本动画