UICollectionView "направление потока" - PullRequest
0 голосов
/ 01 ноября 2018

Типичный поток для UICollectionView - «двигаться поперек, затем вниз»

enter image description here

Мне было любопытно, если бы был способ изменить порядок «потока», то есть сначала «вниз» (для максимального количества строк, затем поперек). Аналогично этому:

enter image description here

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Спасибо @Caleb за то, что вдохновили меня. Я попробовал следующую настройку

class ViewController: UIViewController {
    let items = ["A", "B", "C", "D", "E"]

    // other unnecessary stuff for this demonstration
}

extension ViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if section == 0 {
            return ((items.count + 1) / 2) // just ceiling, after dividing by 2
        } else  if section == 1 {
            return items.count - ((items.count + 1) / 2) // calculating the remainder item
        } else {
            return 0
        }
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)

        var text = "";
        if indexPath.section == 0 {
            // take the even part
            text = items[indexPath.row * 2]
        } else {
            // take the odd part
            text = items[(indexPath.row * 2) + 1]
        }

        (cell.subviews[0].subviews[0] as? UILabel)?.text = text

        return cell
    }

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 2
    }
}

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

Output

Очевидно, что это не ОП ищет. Здесь я использовал два разных раздела, но OP хочет сделать зигзагообразный шаблон внутри раздела. Это, конечно, невозможно, так как @Caleb разбирается, без заливки по ширине мы не сможем спуститься в вертикальном направлении.

0 голосов
/ 01 ноября 2018

Мне было любопытно, если бы был способ изменить порядок «потока», то есть сначала «вниз» (для максимального количества строк, затем поперек.)

Нет способа получить UICollectionFlowLayout для размещения ячеек в главном порядке столбцов - он сначала «пропускает» ячейки поперек, а затем вниз. Это имеет смысл, если вы подумаете об этом - как UICollectionFlowLayout узнает, сколько ячеек разместить в первом столбце до начала второго? Как таковой, он просто помещает столько, сколько поместится в строке, прежде чем перейти к следующему ряду. Но поскольку вы хотите, чтобы направление прокрутки оставалось вертикальным, у него не было бы никаких причин прекращать добавление ячеек в первый столбец.

Но UICollectionView с радостью разместит ячейки в любом месте - вам просто нужно создать собственный объект макета, чтобы указать, куда их поместить. Это не должно быть пугающим, как может показаться ... размещение ячеек на сетке - это не ракетостроение, и объект макета вашей коллекции не должен быть таким же надежным, как UICollectionFlowLayout - он только должен соответствовать вашим конкретным потребностям.

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