Swift 导航栏隐藏后没有返回手势的解决方法

返回手势的功能实现是


Swift 导航栏隐藏后没有返回手势的解决方法_第1张图片

interactivePopGestureRecognizer还存在,但没有起作用,可能是delegate里被阻断了没调用target/action,或者是调用了target/action没运行动画。

经过尝试(参考别人博客),发现自定义返回按钮或者隐藏navigationBar导致的该手势未起作用是因为在delegate阶段被阻断了。

如果我们知道action的名字,则可以添加一个自定义的滑动手势,直接调用该系统action。但API文档并没有提供。

结果就是要么自己实现滑动返回的动画action,要么自己重写interactivePopGestureRecognizer的delegate以让手势继续下去,触发系统的动画action。

实现方法

那就把delegate自己实现一下吧。

新建一个类BaseNavigationController,实现delegate

override func viewDidLoad() {

super.viewDidLoad()

self.setNavigationBarHidden(true,animated: false)

self.interactivePopGestureRecognizer?.delegate = self

}

让手势生效

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {

if (self.viewControllers.count <= 1 ) {

return false

}

return true

}

override func pushViewController(_ viewController: UIViewController, animated: Bool) {

super.pushViewController(viewController, animated: animated)

self.interactivePopGestureRecognizer?.isEnabled = false

}


然后考虑到在push动画发生的时候,禁止滑动手势,在BaseNavigationController添加

override func viewDidAppear(_ animated: Bool) {

super.viewDidAppear(animated)

self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true;

}

还不懂看连接 : http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c4224610003db3e624211005ce963c215afe170bf7a6613464587ef686ce8c40dbb8962a2a9c6269304a890057884de9dc46549a7cd60da9fc48a1e1b465d1f390868815158d13523ad7a1d60f5c4f8238b0033192b1e83f022967ad9b32728c5c&p=882a9644d79209b50be29636470a8c&newp=9e788b1b92934eac59ecde2d021495231610db2151d7d1136b82c825d7331b001c3bbfb423241a07d3c1786306ad435feef63076310727a3dda5c91d9fb4c57479c2&user=baidu&fm=sc&query=swift+interactivePopGestureRecognizer+%CE%DE%D0%A7&qid=9bf4941600029eec&p1=2

你可能感兴趣的:(Swift 导航栏隐藏后没有返回手势的解决方法)