当我按下按钮时,我想在所有视图的顶部显示一个新的“视图/场景”(不确定哪个最好)。我目前有一个包含多层的项目,如下所示:
ContentView.swift
var body: some View {
NavigationView{
TabView(selection: $selection){
PractiseMain()
.tabItem {
Image(systemName: "pencil")
}
TestMain()
.tabItem {
Image(systemName: "clock")
}
...
MyApp.swift
var body: some Scene {
WindowGroup {
RoutingView().environmentObject(sceneOnDisplay)
}
...
struct RoutingView: View {
@EnvironmentObject var sceneOnDisplay: SceneOnDisplay
let persistenceController = PersistenceController.shared
var body: some View {
switch sceneOnDisplay.scene {
case 1:
PractiseSceneView().transition(.scale)
default:
ContentView().environment(\.managedObjectContext, persistenceController.container.viewContext)
}
}
}
当前,我通过替换RoutingView
中的根视图来显示新屏幕,当应用内的按钮更改sceneOnDisplay.scene
时,我们将更改视图。从长远来看,我不确定这是否是个好主意。如果我有10个不同的屏幕,那么我不希望每个视图同时存在。
我尝试使用NavigationView
,但这仅适用于显示子视图,而不能显示其父视图之外的视图。我要复制的行为与在Android中启动新的activity
相同。
答案 0 :(得分:0)
您可以使用ZStack
:
struct RoutingView: View {
@EnvironmentObject var sceneOnDisplay: SceneOnDisplay
let persistenceController = PersistenceController.shared
var body: some View {
ZStack {
mainView
.zIndex(1)
if showOverlay { // this can be some environment variable (similar to `sceneOnDisplay`)
Text("Overlay")
.zIndex(2)
}
}
}
var mainView: some View {
switch sceneOnDisplay.scene {
case 1:
PractiseSceneView().transition(.scale)
default:
ContentView().environment(\.managedObjectContext, persistenceController.container.viewContext)
}
}
}