SwiftUI:如何在列表中正确设置内容大小变化的动画?

时间:2019-11-19 11:17:18

标签: ios swift swiftui

import SwiftUI

struct DynamicRectangle: View {
    @State private var isExpanded = false

    var body: some View {
        Rectangle()
            .fill(Color.blue)
            .frame(width: 200, height: isExpanded ? 400 : 200)
            .animation(.spring())

        .onTapGesture {
            self.isExpanded.toggle()
        }
    }
}

struct ContentView: View {

    var body: some View {
        List {
            DynamicRectangle()
            DynamicRectangle()
            DynamicRectangle()
        }
    }
}

这是一个很小的示例,仍然有一个明显的问题:尽管大小变化正在平滑地进行动画处理,但List本身立即更改了其行大小。是否有任何变通办法可以使行大小与我内部的内容大小一起动画?

谢谢!

1 个答案:

答案 0 :(得分:1)

当我使用ScrollView时,它工作得很好:

import SwiftUI

struct DynamicRectangle: View {
    @State private var isExpanded = false

    var body: some View {
        Rectangle()
            .fill(Color.blue)
            .frame(width: 200, height: isExpanded ? 400 : 200)
            .animation(.spring())

        .onTapGesture {
            self.isExpanded.toggle()
        }
    }
}

struct ContentView: View {

    var body: some View {
        ScrollView {
            DynamicRectangle()
            DynamicRectangle()
            DynamicRectangle()
        }
    }
}

相对于ScrollView,我更喜欢List