ios - 导航 Controller 左边缘滑动和后退按钮行为之间的差异

标签 ios cocoa-touch uinavigationcontroller gestures

我试图找出导航 Controller 左边缘滑动和后退按钮行为之间的区别。我有一个错误,仅当您通过左边缘滑动向后导航时才会发生。如果按后退按钮,它会正常工作。没有进行任何自定义操作来启用或禁用后退导航或手势导航。

我发现关于这个主题的资源出人意料地少,我只是想更彻底地了解每个事件会触发哪些事件,以及它们在行为上有何不同。

最佳答案

此错误是否始终会出现,还是当且仅当您开始向左边缘滑动并取消它时才会出现?我问的原因是我们过去编写的代码假设 viewWillAppear之前的 VC 和 viewWillDisappear当前的总是先于 viewDidAppearviewDidDisappear , 分别。但对于交互式过渡,情况不再如此,因为 viewWillAppear/Disappear当你开始转换时会被调用,但是相应的viewDidAppear/Disappear如果取消交互转换,则可能不会。事实上,在 WWDC 2013 上介绍这个概念时,主持人开玩笑说他们应该重命名 viewWillAppear到“viewMightAppear 、或 viewWillProbablyAppear 、或 iReallyWishThisViewWouldAppear ”。

所以,看看你的viewWillAppearviewWillDisappear方法,并确保那里没有任何依赖于 View 实际出现和消失的内容,因为如果取消手势,您将看不到这些事件。

有关更多信息,请观看 WWDC 2013 视频 Custom Transitions Using View Controllers 。视频的一半多一点讨论了交互式过渡。它讨论了如何实现您自己的交互式转换,但这些概念适用于导航 Controller 的内置左边缘滑动。


在标准的“后退”按钮过程中,从第二个 View Controller 弹出到第一个 View Controller ,事件顺序是典型的:

  • SecondViewController.viewWillDisappear
  • FirstViewController.viewWillAppear
  • SecondViewController.viewDidDisappear
  • FirstViewController.viewDidAppear

但是,如果您开始左边缘滑动手势并暂停,则事件顺序为:

  • SecondViewController.viewWillDisappear
  • FirstViewController.viewWillAppear

但是如果您停止手势并取消转换,则不会看到 SecondViewController.viewDidDisappearFirstViewController.viewDidAppear ,您将看到以下事件:

  • FirstViewController.viewWillDisappear
  • FirstViewController.viewDidDisappear
  • SecondViewController.viewWillAppear
  • SecondViewController.viewDidAppear

根据您在这些各种“出现”相关方法中所做的操作,如果操作不正确,您可能会遇到问题。例如,如果您正在 viewWillDisappear 中进行一些清理工作,确保您只清理在 viewWillAppear 中设置的内容。或者如果您在 viewDidAppear 中执行任何操作,确保在取消交互式转换的情况下再次调用该方法时不会出现问题。如果不了解您在这些与外观相关的方法中所做的操作,就不可能准确说出您的情况出了什么问题。

但最重要的是,您只需要确保应用程序不会做出任何假设,即仅仅因为转换开始,它就一定会完成。

关于ios - 导航 Controller 左边缘滑动和后退按钮行为之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40030510/

相关文章:

iphone - 奇怪的 UINavigationController 导航栏行为是否是由于内存泄漏造成的?

ios - rightBarButtonItem 在 iOS-9 和 iOS-10 中弹出时消失

ios - UIView 类在循环结束时被调用

ios - 从 FBSDKGraphRequest 到 Storyboard

ios - aws Rekognition 未在 iOS 上初始化

iphone - iOS 上的 360 使用图像序列

iphone - 对于 Cocoa 或 Cocoa-touch 有什么好的矢量库?

iOS 应用程序运行断点

ios - UITableView + 在顶部添加内容偏移量

ios - 展开 Segue 不起作用 SWIFT