iOSUIScrollView、UICollectionView
UICollectionView父类是UIScrollView,所以UICollectionView手势返回冲突解决同理
一:
首先写一个基础类,然后让手势继续往下响应
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer{
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]&&[otherGestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]] ) {
returnYES;
}else{
returnNO;
}
}
然后在VC中调用这个类,再在UIScrollView代理中判断是否把手势返回设置成YES或NO就可以了
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (self.scrollview.contentOffset.x!=0) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}else{
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
二:
(这个方法是我在其他帖子学到的(侧滑手势与UIScrollView滚动手势冲突解决))更快捷方便
UIScrollView内是有多个手势的,其中与侧滑冲突的就是UIScreenEdgePanGestureRecognizer这个手势,把它ToFail就可以了。
NSArray *gestureArray = self.navigationController.view.gestureRecognizers;
for (UIGestureRecognizer *gestureRecognizer in gestureArray) {
if ([gestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:gestureRecognizer];
}
}
建议使用第二个方法,因为第二个方法无论UIScrollView滑动到什么位置,都可以直接返回,而第一个方法只能在x==0的位置返回收拾才有响应