关于iOSAPP的侧滑功能我有话说
什么是iOS的侧滑,就是iOS系统自带一个右滑返回
它的优点是效果好比较丝滑,不好的点就是关于使用的说明网络上很多文章都没有说清楚,今天就来聊聊这个功能
iOS的侧滑怎么启用呢?
为了作用到你后面每一个创建viewcontroller,所以需要把代码配置到你的BaseViewController
上代码:
override func viewDidLoad() {super.viewDidLoad()navigationController?.interactivePopGestureRecognizer?.delegate = selfnavigationController?.interactivePopGestureRecognizer?.isEnabled = true}extension BaseViewController: UIGestureRecognizerDelegate {func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {let count = self.navigationController?.children.count ?? 0if (gestureRecognizer == self.navigationController?.interactivePopGestureRecognizer) {//屏蔽调用rootViewController的滑动返回手势,避免右滑返回手势引起死机问题if count == 0 {return false;}}//这里就是非右滑手势调用的方法啦,统一允许激活return true;}/// 是否允许多个手势同时触发,这个没有需要可以不加func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {return true}
}
配置了上面的代码块,那么在你的APP启用系统自带的侧滑就完毕了。下面是关于我使用过程中发现坑点说明
关于部分页面来回切换后,侧滑失效的坑
由于笔者最近项目上一个封装的一个webViewController,它继承自BaseViewController,在该Controller上挂载了一个wkwebview。它在被推出后部分机型的侧滑失效。如果你也面临这个情况可以尝试一下我的解决方案
在viewdidload或者viewwillAppear上执行下面代码,选择一个就可以:
override func viewWillAppear(_ animated: Bool) {super.viewWillAppear(animated)navigationController?.interactivePopGestureRecognizer?.delegate = selfnavigationController?.interactivePopGestureRecognizer?.isEnabled = true}override func viewDidDisappear(_ animated: Bool) {super.viewDidDisappear(animated)navigationController?.interactivePopGestureRecognizer?.delegate = nilnavigationController?.interactivePopGestureRecognizer?.isEnabled = false}override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {return true}override func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {return true}
通过重新设置navigationController的interactivePopGestureRecognizer是否启用和代理,强制其使用当前controller的配置。在viewWillDisAppear关闭是防止webViewController被推到栈顶不显示的bug。
好了到这里今天的分享就结束了,如果这个解决方案帮助不到你,也可以私信或者评论留言,如果我看到就会马上回复你。