swift 在不滑动导航栏的情况下滑出菜单(以编程方式)
swift slide out menu without sliding the navigationbar (programatically)
几天来我一直在尝试制作左滑出式菜单。我无法使用任何库来处理我的应用程序,所以我求助于 raywenderlich 的教程:
http://www.raywenderlich.com/78568/create-slide-out-navigation-panel-swift
但是,它并不完全符合我的要求。我的主要问题是,当我滑出菜单时,导航栏也随之滑出。我需要我的导航栏留在原处,只移动它下面的内容。
我试过了"self.view.bringSubviewToFront(navigationController.navigationBar)"但是没用。
这是我要完成的任务的屏幕截图。
我当前的设置是使用 ContainerViewController
在我的 appDelegate's
didFinishLaunchingWithOptions`:
中设置的
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!
在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
目前没有导航控制器。我确实尝试添加它。但这并没有达到预期的效果。
根据评论,我需要做的是以某种方式使 ContainerViewController 成为具有 navigationController 的控制器,因此它的两个 childController 也应该具有它吗?但是我不知道如何在该级别上添加 navigationController。
如有任何帮助,我们将不胜感激! (我没有使用故事板)
我试过的库:
ZHSwiftSideMenu(做了我想要的。但是花了 2 天时间试图让它工作但没有结果)
Brian Advent youtube 教程
Dekatotoro 的 SlideMenuControllerSwift
wanaya/Slide-Menu
Swift
中的 SWRevealViewController
我会使用嵌入导航控制器(以获取导航栏)的自定义容器控制器来执行此操作。这个控制器有两个容器视图,左边一个是屏幕宽度的 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),它演示了控制器的设置,但没有说明如何根据菜单控制器中的选择更改主控制器中的内容。有很多方法可以实现,如果你能给我更多关于你希望它如何出现的细节,我可以解决这个问题。
几天来我一直在尝试制作左滑出式菜单。我无法使用任何库来处理我的应用程序,所以我求助于 raywenderlich 的教程:
http://www.raywenderlich.com/78568/create-slide-out-navigation-panel-swift
但是,它并不完全符合我的要求。我的主要问题是,当我滑出菜单时,导航栏也随之滑出。我需要我的导航栏留在原处,只移动它下面的内容。
我试过了"self.view.bringSubviewToFront(navigationController.navigationBar)"但是没用。
这是我要完成的任务的屏幕截图。
我当前的设置是使用 ContainerViewController
在我的 appDelegate's
didFinishLaunchingWithOptions`:
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!
在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
目前没有导航控制器。我确实尝试添加它。但这并没有达到预期的效果。
根据评论,我需要做的是以某种方式使 ContainerViewController 成为具有 navigationController 的控制器,因此它的两个 childController 也应该具有它吗?但是我不知道如何在该级别上添加 navigationController。
如有任何帮助,我们将不胜感激! (我没有使用故事板)
我试过的库:
ZHSwiftSideMenu(做了我想要的。但是花了 2 天时间试图让它工作但没有结果)
Brian Advent youtube 教程
Dekatotoro 的 SlideMenuControllerSwift
wanaya/Slide-Menu
Swift
中的 SWRevealViewController我会使用嵌入导航控制器(以获取导航栏)的自定义容器控制器来执行此操作。这个控制器有两个容器视图,左边一个是屏幕宽度的 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),它演示了控制器的设置,但没有说明如何根据菜单控制器中的选择更改主控制器中的内容。有很多方法可以实现,如果你能给我更多关于你希望它如何出现的细节,我可以解决这个问题。