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 多张纸:关闭动画损坏的主要内容,如果未能解决你的问题,请参考以下文章