Ios 使用SwiftUI显示多个覆盖图
我正在尝试使用SwiftUI显示多张工作表 Overlay.swift 为iOS 13编译此代码的效果与预期一样。另一方面,对于iOS 14,showSheetX()会打开一个视图为空的工作表。卸下工作表并再次打开它将显示OverlayView_ButtonX。调试表明,当首次调用showSheetX()时,viewX_visible为false。 这是iOS本身的错误还是我遗漏了什么Ios 使用SwiftUI显示多个覆盖图,ios,swift,Ios,Swift,我正在尝试使用SwiftUI显示多张工作表 Overlay.swift 为iOS 13编译此代码的效果与预期一样。另一方面,对于iOS 14,showSheetX()会打开一个视图为空的工作表。卸下工作表并再次打开它将显示OverlayView_ButtonX。调试表明,当首次调用showSheetX()时,viewX_visible为false。 这是iOS本身的错误还是我遗漏了什么 提前谢谢你 我想我找到了解决这个问题的方法: ContentView.swift 导入快捷界面 var vie
提前谢谢你 我想我找到了解决这个问题的方法: ContentView.swift
导入快捷界面
var view1_visible:Bool=false/我想我找到了这个问题的解决方案:
ContentView.swift
导入快捷界面
var view1_visible:Bool=false//这是否回答了您的问题?这回答了你的问题吗?
import SwiftUI
struct OverlayWith<Content: View>: View {
let content: () -> Content
@Environment(\.presentationMode) private var presentationMode
var body: some View {
VStack{
Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
Image(systemName: "chevron.compact.down")
.resizable()
.frame(width: 40, height: 15)
.accentColor(Color.gray)
.padding()
}
content()
Spacer()
}
}
}
struct OverlayView_Button1: View {
var body: some View{
Text("Button 1 triggered this overlay")
}
}
struct OverlayView_Button2: View {
var body: some View{
Text("Button 2 triggered this overlay")
}
}
import SwiftUI
struct ContentView: View {
@State var overlayVisible: Bool = false
// Button States
@State var view1_visible: Bool = false
@State var view2_visible: Bool = false
var body: some View {
VStack() {
Button(action: {
self.showSheet1()
}, label: {
Text("Button 1")
})
Button(action: {
self.showSheet2()
}, label: {
Text("Button 2")
})
}
.sheet(isPresented: $overlayVisible, content:{
if self.view1_visible {
OverlayWith(content: {
OverlayView_Button1()
})
} else if self.view2_visible {
OverlayWith(content: {
OverlayView_Button2()
})
}
})
}
func showSheet1(){
self.resetButtonStates()
self.view1_visible = true
self.overlayVisible = true
}
func showSheet2(){
self.resetButtonStates()
self.view2_visible = true
self.overlayVisible = true
}
func resetButtonStates(){
self.view1_visible = false
self.view2_visible = false
}
}
import SwiftUI
var view1_visible: Bool = false // <- view1_visible is not a state anymore
var view2_visible: Bool = false // <- view2_visible is not a state anymore
struct ContentView: View {
@State var overlayVisible: Bool = false
var body: some View {
VStack() {
Button(action: {
self.showSheet1()
}, label: {
Text("Button 1")
})
Button(action: {
self.showSheet2()
}, label: {
Text("Button 2")
})
}
.sheet(isPresented: $overlayVisible, content:{
if view1_visible {
OverlayWith(content: {
OverlayView_Button1()
})
} else if view2_visible {
OverlayWith(content: {
OverlayView_Button2()
})
}
})
}
func showSheet1(){
self.resetButtonStates()
view1_visible = true
self.overlayVisible = true
}
func showSheet2(){
self.resetButtonStates()
view2_visible = true
self.overlayVisible = true
}
func resetButtonStates(){
view1_visible = false
view2_visible = false
}
}