2014-08-28 72 views
5

我注意到一些奇怪的东西,可能是UINavigationController中的一个错误。当您覆盖 -navigationController:animationControllerForOperation:fromViewController:toViewController:UINavigationController自定义动画防止从工作中滑动回去

并返回nil(对于默认动画行为),拖动后退手势不再起作用。这个方法的文档说你应该返回“无,如果你想使用标准的导航控制器转换”。我对此的看法是,返回零不应阻止默认行为发生。

我还发现,如果导航控制器的interactivePopGestureRecognizer.delegate返回YES返回YES gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 弹出手势再次起作用。但是,由于我们正在跺脚安装的默认代理,这是一个_UINavigationInteractiveTransition,所以此解决方法是有风险的。

有没有其他途径我可以覆盖animationController方法,同时保留默认的拖动到后退手势?

这与question有关。

+0

[iOS的7使用定制交互仅转换在某些时候(可能重复http://stackoverflow.com/questions/20113701/ios-7-use-custom-interactive-transitions-only-some-of-时间) – jszumski 2015-02-03 19:07:30

回答

1

如果你的子类的UINavigationController,最简单的解决方法是如下(的iOS 9.3,雨燕2.2):

override func viewDidLoad() { 
    super.viewDidLoad() 
    interactivePopGestureRecognizer?.delegate = nil 
} 

或者,在UIViewController中的任何其他实例:

override func viewDidLoad() { 
    super.viewDidLoad() 
    navigationController?.interactivePopGestureRecognizer?.delegate = nil 
} 

实现委托方法navigationController(_:animationControllerFor:from:to:)会禁用导航控制器的交互式弹出手势识别器,但将手势的代理设置为零可重新启用它。

如果您只想在特定情况下启用手势,请参阅this answer