在 Swift 3.0 中实现滑动以在没有导航栏的情况下向后导航

Posted

技术标签:

【中文标题】在 Swift 3.0 中实现滑动以在没有导航栏的情况下向后导航【英文标题】:Implement swipe to navigate back with no navigation bar in Swift 3.0 【发布时间】:2017-10-25 22:53:29 【问题描述】:

这是我的视图控制器:

我没有导航栏,但有一个后退按钮,可将用户带回上一个视图控制器。我想要实现的是滑动导航回来。我进行了很多搜索,但没有找到任何有关正确描述的帮助。请帮我实现这个。

【问题讨论】:

您是否尝试过在手势识别器上添加(退出)展开转场? @pesch,如何实现? 【参考方案1】:

你可以试试这个:

添加手势识别器:

let swipeLeft = UISwipeGestureRecognizer()
swipeLeft.addTarget(self, action: #selector(backSegue) )
swipeLeft.direction = .left
self.view!.addGestureRecognizer(swipeLeft)

@IBAction func backSegue() 
    performSegue(withIdentifier: "backSegue", sender: self)

在你想返回的 ViewController 中添加:

@IBAction func unwindBack(segue:UIStoryboardSegue) 
    print("Welcome back!!!")

在 ViewController 上,如果您要添加滑动识别器,请手动从 backSegue() IBAction 转到顶部的退出图标。选择 ùnwindBack() 出口并将 segue 命名为“backSegue”。如果您需要更多详细信息,请参阅this tutorial。

【讨论】:

我没能测试它,如果你遇到麻烦告诉我,我会在 Xcode 中试试 UISwipeGestureRecognizerUIKit 的一部分,您正在以编程方式将其添加到这一行的视图中:self.view!.addGestureRecognizer(swipeLeft) 非常感谢@pesch。有效。你能给我一些提示,让导航到以前的视图控制器动画吗? 最简单的方法是选择展开转场并在属性检查器中检查动画。但是,如果你想要更复杂的东西,你需要使用UIViewControllerAnimatedTransitioning【参考方案2】:

尝试使用触摸移动、开始和结束委托方法来查找您的触摸移动。然后根据 x 或 y 位置的偏差,您可以导航用户。

【讨论】:

谢谢Jegadeesh,您能详细说明一下吗? 参考此链接***.com/questions/855095/… 当我在 Swift 3.0 上工作时,我试图理解这个客观的 C 东西 objectivec2swift.com 如果您不了解 objc,请使用此链接将 objc 代码转换为 swift。【参考方案3】:

你可以做一件事。

1.使用将您的第一个视图控制器保留为根视图控制器的导航控制器。

2.点击或您的任何操作用户将导航到第二个视图控制器,该控制器将具有导航栏。

3.在你的 viewDidAppear() 类中让导航栏隐藏起来

self.navigationController!.isNavigationBarHidden=false

4.添加自定义返回按钮。

5.此过程将使您在滑动时导航回来,并且导航栏也将不存在。

6.Also on click your custom back button add code for

_ = self.navigationController?.popViewController(animated: true)

这将是您自定义的简单方法。

【讨论】:

以上是关于在 Swift 3.0 中实现滑动以在没有导航栏的情况下向后导航的主要内容,如果未能解决你的问题,请参考以下文章

如何在导航栏菜单中实现平滑的向下滑动效果

swift 4中无法更改导航栏的高度

在 Angular 2 中实现滑动导航的最佳方式是啥?

Bootstrap 3.0 左侧滑动菜单

如何在swift 5中实现滑动中的两个垂直按钮以删除

Ionic 2禁用没有导航栏的向后滑动