Have an existing SwiftUI app and wants to port to visionOS also.
If I do not import RealityKitContent
related parts from Apple's HelloWord app, then ui will appear, app will start in visionOS simulator, but tabbar does not visible, why? How to solve?
import SwiftUI
import RealityKit
//import RealityKitContent
//ContentView.swift
struct ContentView: View {
@EnvironmentObject var sharedState: SharedState
//@Environment(\.openImmersiveSpace) var openImmersiveSpace
//@Environment(\.dismissImmersiveSpace) var dismissImmersiveSpace
var body: some View {
TabView {
NavigationSplitView {
List {
Text("Item")
}
.navigationTitle("Sidebar")
} detail: {
VStack {
Text("Hello, world!")
/*Toggle("Show ImmersiveSpace", isOn: $showImmersiveSpace)
.toggleStyle(.button)
.padding(.top, 50)*/
}
.navigationTitle("Content")
.padding()
}
/*.onChange(of: showImmersiveSpace) { _, newValue in
Task {
if newValue {
await openImmersiveSpace(id: "ImmersiveSpace")
} else {
await dismissImmersiveSpace()
}
}
}*/
.tabItem {
Label("Home", systemImage: "house")
}
List {
Text("Item")
}
.tabItem {
Label("Home", systemImage: "house")
}
}
}
}
// DataMapperApp.swift
//
// DataMapperApp.swift
// DataMapper
//
// Created by János Kukoda on 2023. 01. 10..
//
import SwiftUI
@main
struct DataMapperApp: App {
var sharedState = SharedState() // create an instance of SharedState
init() {
// Set color scheme to dark mode
UITraitCollection.current = UITraitCollection(userInterfaceStyle: .dark)
}
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(sharedState).colorScheme(.dark)
}
/*ImmersiveSpace(id: "ImmersiveSpace") {
ImmersiveView()
}*/
}
}
When I run same code, not commented in Apple's HelloWorld environment:
//
// ContentView.swift
// VisionOS
//
// Created by János Kukoda on 2023. 08. 01..
//
import SwiftUI
import RealityKit
import RealityKitContent
struct ContentView: View {
@State private var showImmersiveSpace = false
@Environment(\.openImmersiveSpace) var openImmersiveSpace
@Environment(\.dismissImmersiveSpace) var dismissImmersiveSpace
var body: some View {
TabView {
NavigationSplitView {
List {
Text("Item")
}
.navigationTitle("Sidebar")
} detail: {
VStack {
Model3D(named: "Scene", bundle: realityKitContentBundle)
.padding(.bottom, 50)
Text("Hello, world!")
Toggle("Show ImmersiveSpace", isOn: $showImmersiveSpace)
.toggleStyle(.button)
.padding(.top, 50)
}
.navigationTitle("Content")
.padding()
}
.onChange(of: showImmersiveSpace) { _, newValue in
Task {
if newValue {
await openImmersiveSpace(id: "ImmersiveSpace")
} else {
await dismissImmersiveSpace()
}
}
}
.tabItem {
Label("Home", systemImage: "house")
}
List {
Text("Item")
}
.tabItem {
Label("Home", systemImage: "house")
}
}
}
}
#Preview {
ContentView()
}
then tabbar visible:
A slightly different but connecting question: How to add RealityKitContent to an existing SwiftUI app?