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

Pie*_*ero 5 objective-c uiscrollview ios uiswipegesturerecognizer uicollectionview

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

| ---> here works
|-----------
|
| ---> This is the collection view and doesn't swipe to go back
|
|-----------
| ---> here works
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?

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

[self.navigationController.interactivePopGestureRecognizer setDelegate:nil];
Run Code Online (Sandbox Code Playgroud)

在主视图中,但通过这种方式我无法滑动回到集合视图中.我创建了一个简单的测试来检查问题:

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

Som*_*Guy 20

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

[self.collectionView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];
Run Code Online (Sandbox Code Playgroud)

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


小智 5

Swift 3(添加到viewDidLoad):

    if let interactivePopGestureRecognizer = navigationController?.interactivePopGestureRecognizer {
        collectionView.panGestureRecognizer.require(toFail: interactivePopGestureRecognizer)
    }
Run Code Online (Sandbox Code Playgroud)