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

Posted

技术标签:

【中文标题】如何在 SwiftUI 的 ScrollView 中制作动画? SwiftUI 中的手风琴风格动画【英文标题】:How make animations work inside ScrollView in SwiftUI? Accordion style animation in SwiftUI 【发布时间】:2019-09-23 07:08:27 【问题描述】:

我正在尝试使用 SwiftUI 构建带有动画的手风琴样式视图。但是,如果我将其包装到 ScrollView 中,动画将无法正常工作。下面是我正在尝试解决的代码。

struct ParentView: View 
    @State var isPressed = false
    var body: some View 
        GeometryReader  geometry in
            ScrollView 
                Group 
                    SampleView(index: 1)
                    SampleView(index: 2)
                    SampleView(index: 3)
                    SampleView(index: 4)
                .border(Color.black).frame(maxWidth: .infinity)
            .border(Color.green)
        
    


struct SampleView: View 
    @State var index: Int
    @State var isPressed = false
    var body: some View 
        Group 
            HStack(alignment:.top) 
                VStack(alignment: .leading) 
                    Text("********************")
                    Text("This View = \(index)")
                    Text("********************")
                
                Spacer()
                Button("Press")  self.isPressed.toggle() 
            

            if isPressed 
                VStack(alignment: .leading) 
                    Text("********************")
                    Text("-----> = \(index)")
                    Text("********************")
                .transition(.slide).animation(.linear).border(Color.red)
            
        

    

下面是我面临的问题的屏幕截图。

【问题讨论】:

【参考方案1】:

要使其具有动画效果,请将 self.isPressed.toggle() 包裹在 withAnimation 闭包中。

Button("Press")  withAnimation  self.isPressed.toggle()  

【讨论】:

是的,你是对的,但是当我这样做时,我的视图向上推,我的第一行在屏幕上的可见区域后面,正如您在我附加的第二个屏幕截图中看到的那样

以上是关于如何在 SwiftUI 的 ScrollView 中制作动画? SwiftUI 中的手风琴风格动画的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中设置 ScrollView 的 contentInset

如何在 SwiftUI 中使用 NSAttributedString 和 ScrollView?

SwiftUI:如何仅在设备处于横向模式时启用 ScrollView?

如何在 SwiftUI 中使用 ScrollView(不滚动)[重复]

如何将 UIActivityViewController 与 SwiftUI 的 ScrollView 集成?

SwiftUI - 如何获取 ScrollView 内容的大小(高度)