【发布时间】:2015-04-03 03:05:20
【问题描述】:
几天来,我一直在尝试制作左侧滑出式菜单。我无法让任何库与我的应用程序一起使用,所以我求助于 raywenderlich 的教程:
http://www.raywenderlich.com/78568/create-slide-out-navigation-panel-swift
但是,它并不完全符合我的要求。我的主要问题是,当我滑出菜单时,导航栏也会随之滑出。我需要我的导航栏保持原位,并且只移动它下面的内容。
我尝试了“self.view.bringSubviewToFront(navigationController.navigationBar)”但是没有用。
这是我正在尝试完成的屏幕截图。
我当前的设置是使用在我的appDelegate'sdidFinishLaunchingWithOptions 中设置的ContainerViewController 进行的:
window = UIWindow(frame: UIScreen.mainScreen().bounds)
let containerViewController = ContainerViewController()
window!.rootViewController = containerViewController
window!.makeKeyAndVisible()
return true
此 ContainerViewController 正在获取 2 个 childViewController。
CenterViewControllerController(我的内容)
CenterViewController 将正确设置 navigationController。
var centerNavigationController: NavigationController!
var centerViewController: CenterViewController!
在ContainerViewControllerviewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
centerViewController = UIStoryboard.centerViewController()
centerViewController.delegate = self
// wrap the centerViewController in a navigation controller, so we can push views to it
// and display bar button items in the navigation bar
centerNavigationController = NavigationController(rootViewController: LandingPageVC())
view.addSubview(centerNavigationController.view)
addChildViewController(centerNavigationController)
centerNavigationController.didMoveToParentViewController(self)
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePanGesture:")
centerNavigationController.view.addGestureRecognizer(panGestureRecognizer)
}
和 SidePanelViewController(我的菜单和有问题的菜单。)
var leftViewController: SidePanelViewController?
func addLeftPanelViewController() {
if (leftViewController == nil) {
leftViewController = SidePanelViewController()
addChildSidePanelController(leftViewController!)
}
}
func addChildSidePanelController(sidePanelController: SidePanelViewController) {
println("addChildSidePanelController")
view.insertSubview(sidePanelController.view, atIndex: 0)
addChildViewController(sidePanelController)
sidePanelController.didMoveToParentViewController(self)
}
SidePanelViewController 目前没有导航控制器。我确实尝试添加它。但这并没有达到预期的效果。
基于 cmets,我需要做的是以某种方式使 ContainerViewController 成为具有 navigationController 的那个,所以它的两个 childControllers 也应该有吗?但是我不知道如何在该级别上添加 navigationController。
任何帮助将不胜感激! (我没有使用故事板)
我尝试过的库:
ENSwiftSideMenu(做了我想做的事。但花了 2 天时间试图让它工作但没有结果)
Brian Advent youtube 教程
Dekatotoro 的 SlideMenuControllerSwift
wanaya/幻灯片菜单
Swift 中的 SWRevealViewController
【问题讨论】:
-
您认为需要嵌入导航控制器的是 ContainerViewController 是正确的。您只需要在应用程序委托中实例化一个导航控制器,并将 ContainerViewController 作为其 rootViewController。然后让导航控制器成为窗口的rootViewController。子控制器不应该嵌入到他们自己的导航控制器中(如果我理解你想要什么,但这取决于你在 MenuController 中选择菜单项时想要发生什么)。
-
顺便说一句,这条线应该做什么:
centerViewController = UIStoryboard.centerViewController()? UIStoryboard 没有那个功能,而且我还以为你没有使用故事板。 -
@rdelmar 我会尝试看看我是否不能这样做。我想我知道我该怎么做:),至于故事板的事情。雷的文件有它们。我还没有弄清楚如何在不破坏东西的情况下完全删除他的故事板,但这不是我现在的主要问题。这些功能是他在扩展中指定的一些功能。但我不使用它们。只是从现在开始删除它们会导致错误。我还有其他几个问题。但这是唯一一个可能意味着我必须重做所有事情的人。所以我需要在其他人之前解决这个问题。
-
@rdelmar 我设法在
ContainerViewController级别上实现了navigationController。但是,我无法弄清楚如何使我的CenterViewController成为LandingPage_VC()。正如您在代码中看到的那样,我曾经使用rootViewController来做到这一点。我将如何将LandingPage_VC()设为CenterViewController? -
我不确定。我真的不知道你在用 CenterViewController 做什么——我不知道你希望它如何与 LandingPageVC 相关联。这对我来说似乎过于复杂。我也不知道你是否真的希望 CenterViewController 嵌入到它自己的导航控制器中。当用户选择菜单项时,您希望发生什么?