隐藏导航栏时,使用带有水平滚动的UICollectionView的interactivepopgesturerecognizer

时间:2015-01-21 20:44:49

标签: ios objective-c uiscrollview uicollectionview uiswipegesturerecognizer

我正在尝试使用interactivepopgesturerecognizer返回一个视图,其中我还有一个带水平滚动的UICollectionView,问题是在集合视图的框架中,返回的滑动不起作用,但是当触摸从集合视图的框架开始时起作用,这是我的观点的一个例子:

| ---> here works
|-----------
|
| ---> This is the collection view and doesn't swipe to go back
|
|-----------
| ---> here works

我怎么能解决问题?

编辑:我意识到只有在推入视图中导航条被隐藏时才会出现此问题,并且当隐藏时滑动返回不会在所有视图中都有效集合视图,并使其工作,我需要添加这一行:

[self.navigationController.interactivePopGestureRecognizer setDelegate:nil];

在主视图中,但是这样我就无法滑动回到集合视图中。 我创建了一个简单的测试来检查问题:

https://www.dropbox.com/s/c7ueyrcmm2x1m5w/TestSwipe.zip?dl=0

2 个答案:

答案 0 :(得分:20)

将此行代码添加到SecondViewController中的viewDidLoad方法

[self.collectionView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];

这实质上告诉集合视图的手势识别器,它需要等待交互式流行识别器在继续之前失败,从而强制优先处理交互式弹出窗口。

答案 1 :(得分:3)

Swift 3(加viewDidLoad):

    if let interactivePopGestureRecognizer = navigationController?.interactivePopGestureRecognizer {
        collectionView.panGestureRecognizer.require(toFail: interactivePopGestureRecognizer)
    }