gpt4 book ai didi

ios - SwiftUI 崩溃 : "SheetBridge: abandoned presentation detected" when dismiss a sheet view (which is triggered by another sheet view )

转载 作者:行者123 更新时间:2023-12-01 15:44:11 30 4
gpt4 key购买 nike

Xcode 12 测试版 4
我有这个 ContentView 有两个不同的模态视图。我想使用 sheet(isPresented: onDismiss: content:)显示第一个 View ,当它关闭时,自动显示第二个 View 。
这是我的代码

struct ContentView: View {
@State var showFirst = false
@State var showSecond = false

var body: some View {
VStack(spacing: 20) {
Text("showFirst: \(showFirst.description)")
Text("showSecond: \(showSecond.description)")

Button("show") {
showFirst.toggle()
}
.sheet(isPresented: $showFirst) {
showSecond.toggle()
} content: {
FirstView(isPresented: $showFirst)
}

Text("")
.sheet(isPresented: $showSecond) {
SecondView(isPresented: $showSecond)
}

}

}
}

struct FirstView: View {
@Binding var isPresented: Bool

var body: some View {
VStack {
Button("close") {
isPresented = false
}
Text("First View")
}
}
}

struct SecondView: View {
@Binding var isPresented: Bool

var body: some View {
VStack {
Button("close") {
isPresented = false
}
Text("Second View")
}
}
}
然后我运行代码。
如果我通过向下拖动手势关闭模型 View ,它会起作用。
如果我通过点击关闭按钮关闭第一个 View ,它会在关闭第二个 View 时崩溃,并抛出一个 fatal error :

Fatal error: SheetBridge: abandoned presentation detected: file SwiftUI, line 0


我的困惑
无论如何,当点击第一个 View 的关闭按钮并关闭第二个 View 时,它看起来像, $showSecond没有变成假的。
向下拖动和手动切换 $isPresented 之间有什么区别吗?
如果我使用 presentationMode.wrappedValue.dismiss()而不是绑定(bind) isPredented ,它也崩溃了。

最佳答案

解决方法是稍微延迟显示第二张纸,以使第一张纸有可能完全完成。
使用 Xcode 12/iOS 14 测试

Button("show") {
showFirst.toggle()
}
.sheet(isPresented: $showFirst) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { // << here !!
showSecond.toggle()
}
} content: {
FirstView(isPresented: $showFirst)
}

关于ios - SwiftUI 崩溃 : "SheetBridge: abandoned presentation detected" when dismiss a sheet view (which is triggered by another sheet view ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63293531/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com