什么是iOS的侧滑,就是iOS系统自带一个右滑返回
它的优点是效果好比较丝滑,不好的点就是关于使用的说明网络上很多文章都没有说清楚,今天就来聊聊这个功能
为了作用到你后面每一个创建viewcontroller,所以需要把代码配置到你的BaseViewController
上代码:
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.interactivePopGestureRecognizer?.delegate = self
navigationController?.interactivePopGestureRecognizer?.isEnabled = true
}
extension BaseViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
let count = self.navigationController?.children.count ?? 0
if (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 = self
navigationController?.interactivePopGestureRecognizer?.isEnabled = true
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
navigationController?.interactivePopGestureRecognizer?.delegate = nil
navigationController?.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。
好了到这里今天的分享就结束了,如果这个解决方案帮助不到你,也可以私信或者评论留言,如果我看到就会马上回复你。