UICollectionView поверх UITableView в отдельных контроллерах дочернего представления - PullRequest
0 голосов
/ 05 мая 2020

Моя иерархия представлений следующая.

ParentContainerVC    
..UINavigationViewController (child of ParentContainerVC)
....UITableViewController (child of navigation view controller)
..UICollectionViewController (child of ParentContainerVC)

События прокрутки правильно перехватываются V C, на котором размещен UICollectionView, но расположенный ниже UITableView остается замороженным. Оба имеют размер, соответствующий полной ширине / высоте экрана, но должны иметь возможность прокрутки независимо (UICollectionView не скрывает UITableView внизу, если вам интересно, но пользователь должен иметь возможность прокручивать оба экрана в то же время).

В V C, где размещается представление коллекции, я реализовал:

extension UICollectionViewController: UIGestureRecognizerDelegate {
  public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
  }
}

Однако это не помогло. Я предполагаю, что это связано с тем, что контроллер представления был добавлен в качестве дочернего контроллера, и это не будет работать с одноуровневыми контроллерами представления.

ParentContainerVC - это просто контроллер представления контейнера с двумя дочерними элементами. Что мне нужно сделать, чтобы события касания / прокрутки работали независимо между двумя дочерними элементами / братьями и сестрами?

1 Ответ

0 голосов
/ 06 мая 2020

Это было немного сложно, но в конце концов я понял это. По сути, проблема заключается в том, что после того, как представление (сначала глубина) проходит проверку на попадание, другие представления позади или вокруг проверенного представления перестают получать касания.

Хитрость заключается в том, чтобы добавить еще одну фиктивную UIView перед всем остальным контентом, чтобы организовать и объединить все штрихи. Затем возьмите .panGestureRecognizer из каждого из UIScrollView / UICollectionView / UITableView контроллеров дочернего представления и добавьте их в этот фиктивный контроллер представления.

Теперь все прокручиваемые списки независимо от того, где в иерархия представлений начинает прокручиваться и реагировать на прикосновения, без возни с hitTest или подклассами.

Для дальнейшего уточнения, какой вид прокрутки сначала реагирует на прикосновение, вы можете добавить еще UIPanGestureRecognizer, а затем сделать что-то вроде .require(toFail: myNewPanGesture) вместе с реализацией того, как и когда вы хотите, чтобы этот жест не удался. Таким образом, вы можете управлять прокручиваемым контентом, который хотите прокрутить в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...