Сложная кросс-компоновочная архитектура и разделение задач - PullRequest
0 голосов
/ 23 октября 2018

Я хочу реализовать кросс-макет точно так же, как приложение Wallapop в своей основной ленте.


image
Как видите, он состоит из двух групп ячеек (Избранные предметы, Предметы рядом с вами) .Первая группа прокручивается по горизонтали, а вторая группа прокручивается по вертикали.

Первый компонент UIKit, который мне пришёл в голову при создании такого рода макетов, - UICollectionView, имеющий по одному разделу для каждого направления прокрутки.К сожалению, UICollectionView текущая реализация очень ограничена, заставляя прокручивать только в одном направлении, независимо от того, сколько разделов вы объявляете.

Так что я хотел попробовать его с ванильными компонентами UIKit, и это то, что я получил;


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

Я также думал об использовании одиночного UICollectionViewController для вертикальных ячеек и установке UIStackView с горизонтальными UICollectionViewController с, необходимыми для горизонтальных ячеек, но это грязное решение и не масштабируетсяочень хорошо, я даже не мог установить заголовок для вертикальной секции ячеек, если я выбрал этот способ.

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

Есть ли лучший способ реализовать макет, подобный тому, который я хочу, с ванильными компонентами UIKit?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Самое простое и стабильное решение - использовать следующую иерархию представлений:

  1. Использовать один UICollectionView (1) экземпляр
  2. Горизонтально прокручиваемые секции могут быть реализованы как Ширина экрана UICollectionViewCell, содержащая горизонтально прокручиваемую UICollectionView
  3. Вертикально прокручиваемые секции должны быть просто регулярной секцией из UICollectionView (1)

Плюсы

  • Только UIKit
  • Ничего экстраординарного не требуется - просто UICollectionViewFlowLayout везде
  • Ячейки одинаковы для ячеек с горизонтальной прокруткой и ячеек с вертикальной прокруткой
  • Хорошая масштабируемость и разделение задач.Независимое поведение горизонтальных и вертикальных секций, каждая из которых может иметь несколько источников данных.

Минусы

Горизонтально прокручиваемые секции должны иметь фиксированную высоту.В противном случае поведение прокрутки будет сложнее поддерживать.

Стрелка на изображении означает Использование!

enter image description here

0 голосов
/ 23 октября 2018

Вы можете использовать следующий способ:

Представление коллекции с двумя ячейками в нем.Первая ячейка предназначена для избранных предметов, а вторая - для предметов рядом с вами.Первая ячейка будет охватывать всю ширину и высоту, необходимые для вашего дизайна.

Для масштабируемости используйте представление контейнера, в которое вставляется CollectionViewController, который будет отвечать за показ выбранного элемента.Этот встроенный CollectionViewController будет прокручиваться по горизонтали.

Элементы рядом с вами - прямая прямая ячейка исходного контроллера представления коллекции.

Таким образом, ваша реализация показанного горизонтального представления коллекции остается во встроенном CollectionViewController и элементах.для ячейки остается в основном CollectionViewController, который также содержит слабое соединение (встраивание в представление контейнера) с выбранным элементом.

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

Вот скриншот, на котором изображена идея

enter image description here

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