我在ios应用程序中创建了一个hamburger menu
我的navigationBar中有一个rootViewController,但现在我需要将navigationBar移到我的childViewController中的一个才能使一些functions/buttons工作。
现在我已经把它移到一个childViewController中,navigationBar不会显示。如果我使childViewControllerrootController显示良好,这是因为在我的navigationBar中,我有appDelegate作为rootController
只有当我将其设为navigationController时,childViewController才决定不显示。不知道我需要做什么才能让它起作用。
这是我的navigationBar,我在这里制作appDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()
        window?.rootViewController = UINavigationController(rootViewController: jobListController())


        return true
    }

这是我的汉堡包菜单,我在这里添加了:
override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.white

        // ADD VIEWCONTROLLERS TO MENU
        view.addSubview(sideBarUIView)

        addChildViewController(sideBar)
        view.addSubview(sideBar.view)
        sideBar.view.center = sideBarUIView.center

        addChildViewController(jobList)
        view.addSubview(jobList.view)
        jobList.view.center = overlayView.center

        // ADD UI VIEWS TO HAMBURGER MENU
        view.addSubview(overlayView)
        overlayView.isHidden = true
    }

这是我要将rootViewController添加到的viewDidLoad
class jobListController: UIViewController {
        super.viewDidLoad()

        navigationController?.navigationBar.barTintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
        navigationController?.view.backgroundColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
        navigationController?.navigationBar.shadowImage = UIImage()

        navigationItem.title = "JOBS"

        let searchButton = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(HandleSearch))
        let addNewJobButton = UIBarButtonItem(barButtonSystemItem: .compose, target: self, action: #selector(HandleNewJob))
        searchButton.tintColor = UIColor(red:0.63, green:0.63, blue:0.63, alpha:1.0)
        addNewJobButton.tintColor = UIColor(red:0.63, green:0.63, blue:0.63, alpha:1.0)

        navigationItem.rightBarButtonItems = [addNewJobButton, searchButton]
    }
}

编辑:
在使用了卢卡斯·马雷达的答案之后,这个答案似乎解决了我遇到的问题,它创造了一个新的问题。
在我的rootController(汉堡包菜单)上,我可以在屏幕上的任何地方滑动,它将打开汉堡包菜单,这是很好的,因为这是期望的效果。
我的一个孩子的视图控制器在我的汉堡菜单里面有一个表视图。如果我单击其中一个单元格并转到一个新的viewController,汉堡包菜单仍然可以通过向右滑动来访问。
我只想在顶层访问汉堡包菜单,但现在似乎我可以在我的应用程序中的任何地方访问它。

最佳答案

1)汉堡包菜单视图控制器应该是UIViewController的子类。appDelegate的第一步:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = HamburgerViewController()
        window?.makeKeyAndVisible()

        return true
    }

2)HamburgerView控制器应将NavigationController(或其子类)嵌入某些根视图控制器。所以在汉堡控制中心
override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.white

        // ADD VIEWCONTROLLERS TO MENU
        view.addSubview(sideBarUIView)

        addChildViewController(sideBar)
        view.addSubview(sideBar.view)
        sideBar.view.center = sideBarUIView.center

        let navigationController = UINavigationController(rootViewController: jobListController())
        addChildViewController(navigationController)
        view.addSubview(navigationController.view)
        navigationController.view.center = overlayView.center

        // ADD UI VIEWS TO HAMBURGER MENU
        view.addSubview(overlayView)
        overlayView.isHidden = true
    }

3)工作清单可以保持不变。我假设在当前状态下,navigationController属性为零
更新的答案
关于如何处理hamburgerGestureRecognizer
1)您可以将HamburgerEstureRecognizer添加到rootViewController视图中
在您的情况下,它是JobList所以手势识别器将只在rootViewController中
            let jobList = jobListController()
            let navigationController = UINavigationController(rootViewController: jobList)
            addChildViewController(navigationController)
            view.addSubview(navigationController.view)
            joblist.view.addGestureRecognizer(hamburgerGestureRecognizer)
            navigationController.view.center = overlayView.center

在汉堡菜单的屏幕之间切换的地方,你可以重用这个识别器
viewControllerToPresent.view.addGestureRecognizer(hamburgerGestureRecognizer)

2)您可以实现手势识别器的委托功能,并根据presenting viewController有条件地禁用它。像这样的:
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return currentlyPresentedNavigationController.viewControllers.count == 1
    }

关于ios - 导航栏未显示在childViewController内部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49918414/

10-10 23:12