gpt4 book ai didi

ios - 在不滑动导航栏的情况下快速滑出菜单(以编程方式)

转载 作者:可可西里 更新时间:2023-11-01 00:53:13 25 4
gpt4 key购买 nike

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

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

但是,它并不完全符合我的要求。我的主要问题是,当我滑出菜单时,导航栏也随之滑出。我需要我的导航栏保持原样,并且只移动它下面的内容。

我试过“self.view.bringSubviewToFront(navigationController.navigationBar)”但是没有用。

这是我要完成的任务的屏幕截图。

enter image description here

我当前的设置是使用在我的 appDelegate 的didFinishLaunchingWithOptions` 中设置的 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!

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 的 Controller ,因此它的两个 childController 也应该具有它吗?但是我不知道如何在该级别上添加 navigationController。

任何帮助将不胜感激! (我没有使用 Storyboard)

我试过的库:

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

Brian Advent youtube 教程

Dekatotoro 的 SlideMenuControllerSwift

wanaya/幻灯片菜单

Swift 中的 SWRevealViewController

最佳答案

我会使用嵌入导航 Controller (以获取导航栏)的自定义容器 Controller 来执行此操作。这个 Controller 有两个容器 View ,左边一个是屏幕宽度的 80%,右边一个是全屏宽度;这些可以在 Storyboard中设置。添加到容器 Controller View 的滑动手势识别器将允许您滑动菜单打开和关闭。下面的代码是您在容器 View Controller 中打开和关闭菜单所需的全部代码。导出 leftCon 是左容器 View 的左边缘与其父 View 之间的约束,

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 ),它演示了 Controller 的设置,但没有说明如何根据菜单 Controller 中的选择更改主 Controller 中的内容。有多种方法可以实现,如果您能给我更多关于您希望如何显示的详细信息,我可以解决这个问题。

关于ios - 在不滑动导航栏的情况下快速滑出菜单(以编程方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29425646/

25 4 0