0

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()
        }*/
    }
}

enter image description here

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:

enter image description here

A slightly different but connecting question: How to add RealityKitContent to an existing SwiftUI app?

János
  • 32,867
  • 38
  • 193
  • 353

0 Answers0