【问题标题】:SwiftUI multiple sheets: dismiss animation brokenSwiftUI 多张纸:关闭动画损坏
【发布时间】: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)

【问题讨论】:

    标签: swiftui presentation


    【解决方案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,它已经可以工作了。问题是,由于某些原因,我需要将它们附加到子视图中。因为在我的情况下,这些视图来自另一个模块,所以使用这些视图的应用程序看不到工作表修饰符,它只是显示/隐藏它们,导致故障。
    猜你喜欢
    • 2023-03-11
    • 2021-11-27
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多