Xcode 12 beta 4
У меня есть ContentView с двумя разными модальными представлениями. Я хочу использовать sheet(isPresented: onDismiss: content:)
для отображения первого представления, когда оно закрыто, автоматически отображается второе представление.
Это мой код
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")
}
}
}
Затем я запускаю код. Если я закрою виды модели жестом перетаскивания вниз, все заработает. Если я закрою первое представление, нажав кнопку закрытия, оно выйдет из строя при закрытии второго представления и выдаст фатальную ошибку:
Неустранимая ошибка: SheetBridge: обнаружена брошенная презентация: файл SwiftUI, строка 0
Мое недоразумение
Похоже, что если нажать кнопку закрытия первого представления и в любом случае закрыть второе представление, $showSecond
не изменилось на false.
Есть ли разница между перетаскиванием вниз и ручным переключением $ isPresent?
И если я использую presentationMode.wrappedValue.dismiss()
вместо привязки isPredented
, он тоже вылетает.