ios – My Toolbar of a View(SwiftUI.View) is not displayed in UIKit but the body of the View is


I have made a View in SwiftUI and I’m trying to display it as a pop over to my current UIKit ViewController. I managed it to display my SwiftUI.View but the toolbar is hidden / not displayed. Has anyone an idea? Below is the code, I have shortened it to the most important parts so that they are easier to read

import SwiftUI
import PhotosUI

struct RoomDetailsEditView: View {
    
    @StateObject var viewModel: RoomDetailEditModel
    @State private var selectedItem: PhotosPickerItem? = nil

    
    @ToolbarContentBuilder
    private var toolbar: some ToolbarContent {
        ToolbarItem(placement: .cancellationAction) {
            Button("Abbrechen") {
                dismiss()
            }
        }
        
        ToolbarItem(placement: .confirmationAction) {
            Button("Speichern") {
                viewModel.saveProfileData()
                dismiss()
            }.self.disabled(!viewModel.viewGotEdited)
        }
    }
    

    
    private var topicSection: some View {...}
    
    private var avatar: some View {...}
    

    
    private var roomNameSection: some View {...}
    
    var body: some View {
        Form {
            avatar
            roomNameSection
            topicSection
        }
        .scrollDismissesKeyboard(.immediately)
        .navigationTitle("Raum bearbeiten")
        .navigationBarTitleDisplayMode(.inline)
        .toolbar { toolbar }
        
    }
}

import Foundation
import UIKit
import SwiftUI


class RoomInformationViewController: UIViewController {
    
    var collectionView: UICollectionView! = nil
    var dataSource: UICollectionViewDiffableDataSource<RoomInformationViewSections, RoomInformationElement>! = nil
    var room: Room! = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.initNavigationBar()
        self.initCollectionView()
        self.loadDataSource()
    }
    
   ...
    
    @objc func editRoomData() {
        
        let viewModel = RoomDetailEditModel(room: self.room, isProfileEdit: false)
        let editRoomView = RoomDetailsEditView(viewModel: viewModel)
        let wrapperViewController = ViewControllerWrapper(rootView: editRoomView)
        
        
        
        let navController = UINavigationController(rootViewController: wrapperViewController)
        navController.modalPresentationStyle = .popover
        navController.modalTransitionStyle = .coverVertical
        
        self.present(navController, animated: true, completion: nil)
        
    }
    ...
}

class ViewControllerWrapper<Content: View>: UIViewController {

    private var hostingController: UIHostingController<Content>!
    
    
    
    
    init(rootView: Content) {
        super.init(nibName: nil, bundle: nil)
        hostingController = UIHostingController(rootView: rootView)
        
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        addChild(hostingController)
        view.addSubview(hostingController.view)
        hostingController.view.frame = view.bounds
        hostingController.didMove(toParent: self)
        print(hostingController.navigationItem.title)
        
        navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "a", style: .plain, target: nil, action: nil)
    }


}

Latest articles

spot_imgspot_img

Related articles

Leave a reply

Please enter your comment!
Please enter your name here

spot_imgspot_img