You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 16.4下SwiftUI可展开列表动画失效,求问题原因及解决方向

SwiftUI可展开列表iOS 16.4+动画失效问题

我参考教程实现了SwiftUI可展开列表,具体代码如下:

struct ContentView: View {
    
    var movies: [Movie]

    var body: some View {
        List(movies, children: \.movies) { movie in
                Text(movie.title)
        }
    }
}

struct Movie: Identifiable {
    let id: String
    let title: String
    var movies: [Movie]?
}

该列表在iOS 16.1上的动画表现正常:
iOS 16.1上的列表

但自iOS 16.4版本起动画失效:
iOS 16.4上的列表

请问这是系统层面的Bug还是需要更换实现技术?


问题分析与解决方案

这是iOS 16.4及后续版本中List原生展开功能的已知系统Bug,苹果在部分iOS 16.x小版本更新中引入了这个动画异常问题。

如果需要恢复展开/收起的动画效果,建议改用手动实现可展开列表的方式,核心思路是通过绑定的布尔值控制子列表的显示状态,配合withAnimation确保动画生效:

手动实现示例代码

struct ContentView: View {
    var movies: [Movie]
    
    var body: some View {
        List(movies) { movie in
            ExpandableRow(movie: movie)
        }
    }
}

struct ExpandableRow: View {
    let movie: Movie
    @State private var isExpanded = false
    
    var body: some View {
        VStack(alignment: .leading, spacing: 0) {
            Button(action: {
                withAnimation {
                    isExpanded.toggle()
                }
            }) {
                HStack {
                    Text(movie.title)
                    Spacer()
                    Image(systemName: isExpanded ? "chevron.down" : "chevron.right")
                        .font(.caption)
                }
                .padding(.vertical, 8)
            }
            
            if isExpanded, let children = movie.movies {
                ForEach(children) { childMovie in
                    ExpandableRow(movie: childMovie)
                        .padding(.leading, 20)
                }
            }
        }
    }
}

struct Movie: Identifiable {
    let id: String
    let title: String
    var movies: [Movie]?
}

这种手动实现的方式不受系统Bug影响,能稳定保留展开/收起的过渡动画,同时还支持自定义行样式、动画曲线等扩展需求。

内容的提问来源于stack exchange,提问作者nelson PARRILLA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:42:33