当我们的APP里使用一个在水平方向上滑动的UIScrollView
时,会导致系统的侧滑返回功能响应失效,这是因为UIScrollView
和侧滑返回共用一个UIPanGestureRecognizer
手势响应事件,UIScrollView
拦截了这个事件并做出了响应。我们只需要创建UIScrollView
的一个分类并重写gestureRecognizerShouldBegin
方法即可。
extension UIScrollView {
// 解决有UIScrollView时不能在屏幕左边侧滑返回
open override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
// 过滤UITextView(因为UITextView继承自UIScrollView),否则会引起崩溃
if (gestureRecognizer.view?.isMember(of: UITextView.self))! {
return true
}
let velocity = (gestureRecognizer as! UIPanGestureRecognizer).velocity(in: self)
let location = gestureRecognizer.location(in: self)
if (velocity.x > 0.0 && Int(location.x) % Int(UIScreen.main.bounds.size.width) < 60) {
return false
}
return true
}
}
网友评论