swift滑出菜单而不滑动导航栏(以编程方式)

时间:2015-04-03 03:05:20

标签: ios menu swift

我一直试图制作一个左侧滑出菜单几天。我无法使用任何库来处理我的应用程序,所以我使用了raywenderlich的教程:

http://www.raywenderlich.com/78568/create-slide-out-navigation-panel-swift

然而,它并没有完全符合我的要求。我的主要问题是,当我滑出菜单时,导航栏随之滑出。我需要我的导航栏留在原地,只移动它下面的内容。

我试过" self.view.bringSubviewToFront(navigationController.navigationBar)"但这没有用。

这是我想要完成的截图。

enter image description here

我当前的设置是使用我ContainerViewController didFinishLaunchingWithOptions`中设置的appDelegate's设置的:

window = UIWindow(frame: UIScreen.mainScreen().bounds)

    let containerViewController = ContainerViewController()

    window!.rootViewController = containerViewController
    window!.makeKeyAndVisible()

    return true

这个ContainerViewController正在获得2个childViewControllers。

CenterViewControllerController(我的内容)

CenterViewController将正确设置navigationController。

var centerNavigationController: NavigationController!
var centerViewController: CenterViewController!

ContainerViewController viewDidLoad

  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目前还没有navigationController。我确实尝试添加它。但那并没有取得预期的效果。

基于这些评论,我需要做的是以某种方式使ContainerViewController成为具有navigationController的那个,所以它们的两个childControllers也应该有这个?但是我不知道如何在该级别添加navigationController。

任何帮助将不胜感激! (我不使用故事板)

我试过的图书馆:

ENSwiftSideMenu(做了我想要的。但是花了两天的时间试图让它工作没有结果)

Brian Advent youtube教程

Dekatotoro的SlideMenuControllerSwift

wanaya /滑菜单

Swift中的SWRevealViewController

1 个答案:

答案 0 :(得分:4)

我会使用嵌入在导航控制器中的自定义容器控制器来实现此目的(以获取导航栏)。该控制器有两个容器视图,一个宽度为屏幕宽度的80%,另一个是全屏宽度;这些可以在故事板中设置。添加到容器控制器视图的滑动手势识别器将允许您滑动菜单打开和关闭。下面的代码是容器视图控制器中打开和关闭菜单所需的全部代码。出口leftCon是左容器视图的左边缘与其超视图之间的约束

class ViewController: UIViewController {

    @IBOutlet weak var leftCon: NSLayoutConstraint!
    @IBOutlet weak var leftContainer: UIView!


    @IBAction func closeMenu(sender: UISwipeGestureRecognizer) {
        leftCon.constant = -leftContainer.frame.size.width
        UIView.animateWithDuration(0.3){
            self.view.layoutIfNeeded()
        }
    }

    @IBAction func openMenu(sender: UISwipeGestureRecognizer) {
        leftCon.constant = 0
        UIView.animateWithDuration(0.3){
            self.view.layoutIfNeeded()
        }
    }

}

我有一个示例应用程序(http://jmp.sh/5QwhYov),用于演示控制器的设置,但没有说明如何根据菜单控制器中的选择更改主控制器中的内容。有许多方法可以实施,如果你能给我更多详细信息,我可以解决这个问题。

相关问题