Я попробовал gestRecognizerShouldBegin, и он сделал свою работу. Вот мое решение (увеличенное изображение показывает, является ли collectionView полноэкранным или нет). Логика c должна проверять, находится ли начальная точка жеста внутри какой-либо из строк tableView (с небольшим зазором слева / справа, чтобы сохранить возможность прокрутки collectionView при панорамировании с боков, используя insetBy (dx: dy :)), currentCell является родительским UICollectionViewCell.
extension MyCollectionView: UIGestureRecognizerDelegate {
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
guard zoomed, let currentCell = currentCell, gestureRecognizer.view is MyCollectionView else { return true }
let cellViews = currentCell.myTableView.visibleCells
let touchPoint = gestureRecognizer.location(in: currentCell.myTableView)
let cellsAtPoint = cellViews.filter {
let localPoint = $0.convert(touchPoint, from: currentCell.myTableView)
return $0.bounds.insetBy(dx: 40, dy: 0).contains(localPoint)
}
return cellsAtPoint.count == 0
}
}