代码之家  ›  专栏  ›  技术社区  ›  Tometoyou

无法移除视图以设置动画

  •  0
  • Tometoyou  · 技术社区  · 3 年前

    我有一个 VStack 在这里,我有一个标题高于其他一些观点。标题根据的值显示/隐藏 @Published 来自环境对象的变量。理想情况下,当标题应该隐藏时,我希望它通过淡出并在 VStack 向上的然而,实际发生的情况是,它立即消失,并在没有动画的情况下向上移动其余视图。我该怎么解决这个问题?

    struct MyView: View {
    @EnvironmentObject var modelController: MyModelController
    
        var body: some View {
            VStack {
                title()
                //..other views here
            }
        }
    
        @ViewBuilder
        func title() -> some View {
            if let currentPage = modelController.currentPage,
               currentPage >= 6 {
                EmptyView()
            } else {
                Text("Create Event")
            }
        }
    }
    
    2 回复  |  直到 3 年前
        1
  •  1
  •   EmilioPelaez    3 年前

    您需要使用 .transition() 修改器,告诉系统当视图出现或消失时要设置动画。另外,我认为你不需要回来 EmptyView 当你想隐藏标题时。

    @ViewBuilder
    func title() -> some View {
        if modelController.currentPage ?? 0 < 6 {
            Text("Create Event")
                .transition(.opacity)
        }
    }
    

    我用过 opacity 过渡,但它是一个非常可自定义的修改器,您可以传递一个不对称过渡,在插入和删除时执行不同的动画。我建议在谷歌上搜索或查看文档以了解更多信息。

        2
  •  1
  •   Asperi    3 年前

    您的代码快照不可测试,但请尝试以下操作

    VStack {
        title()
        //..other views here
    }
    .animation(.default, value: modelController.currentPage)   // << here !!