SwiftUI 多张纸:关闭动画损坏

Posted

技术标签:

【中文标题】SwiftUI 多张纸:关闭动画损坏【英文标题】:SwiftUI multiple sheets: dismiss animation broken 【发布时间】:2021-04-23 12:43:04 【问题描述】:

我有 button1,按下时显示 sheet1。然后我有一个切换按钮,显示一个按钮 2,当按下它时会显示 sheet2。

如果我只是按下按钮 1,工作表会显示并以动画形式消失。但是,如果我按下显示按钮 2 的切换开关,然后按下按钮 1,则工作表关闭动画会中断(根本没有动画)。

struct ContentView: View 

@State private var showSheetButton2 = false
@State private var showSheet1 = false
@State private var showSheet2 = false

var body: some View 

    VStack 
        Toggle("Show Sheet Button 2", isOn: $showSheetButton2)

        Button(action: 
            showSheet1.toggle()
        , label: 
            Text("Show Sheet 1")
        )
        .sheet(isPresented: $showSheet1, content: 
            Button(action: 
                showSheet1 = false
            , label: 
                Text("Dismiss")
            )
        )

        if showSheetButton2 
            Button(action: 
                showSheet2.toggle()
            , label: 
                Text("Show Sheet 2")
            )
            .sheet(isPresented: $showSheet2, content: 
                Button(action: 
                    showSheet2 = false
                , label: 
                    Text("Dismiss")
                )
            )
        
    .padding()


编辑:

ios 14.5 中修复:

您现在可以应用多个工作表(isPresented:onDismiss:content:) 和 fullScreenCover(item:onDismiss:content:) 修饰符在同一视图中 等级制度。 (74246633)

【问题讨论】:

【参考方案1】:

不知何故,If 语句中的这张表正在破坏动画。请尝试在此 if 语句之外添加 EmptyView 并将工作表分配给该视图。

        if showSheetButton2 
            Button(action: 
                showSheet2.toggle()
            , label: 
                Text("Show Sheet 2")
            )
        
        EmptyView()
            .sheet(isPresented: $showSheet2, content: 
                Button(action: 
                    showSheet2 = false
                , label: 
                    Text("Dismiss")
                )
            )

【讨论】:

是的,我什至不需要空视图。如果我将工作表移动到外部 VStack,它已经可以工作了。问题是,由于某些原因,我需要将它们附加到子视图中。因为在我的情况下,这些视图来自另一个模块,所以使用这些视图的应用程序看不到工作表修饰符,它只是显示/隐藏它们,导致故障。

以上是关于SwiftUI 多张纸:关闭动画损坏的主要内容,如果未能解决你的问题,请参考以下文章

破碎的动画SwiftUI

SwiftUI:在没有动画的情况下显示 fullScreenCover [关闭]

SwiftUI - 动画过渡

SwiftUI在准备底页时偏移动画问题

SwiftUI 动画滑入和滑出

如何通过 swiftUI 制作 2048 游戏 [关闭]