Как разделить разделы в UICollectionView? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть UICollectionView, который реализует страницы, организованные в разделы. Я хочу разделить раздел на две части и иметь следующую логику. Но UICollectionView, кажется, не доволен этим:

func splitSection(at index: IndexPath) {
    // this performs the logical split
    self.document.splitSection(at: index)

    if let cv = self.collectionView {
      cv.performBatchUpdates({
        let N = self.document.numberOfSection
        let n = N - index.section - 1
        let range = Range.init(uncheckedBounds: (index.section, n))
        let affectedSections = IndexSet.init(integersIn: range)
        cv.reloadSections(affectedSections)

        let sections = IndexSet.init(integersIn: Range.init(uncheckedBounds: (N-1, 1)))
        cv.insertSections(sections)
      }, completion: { (_) in
        // commit section updates
      })
    }
  }

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

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

Основная идея:

  1. Переместить все разделы после разделения на 1
  2. Вставить раздел после разбиения раздела
  3. Удалить все элементы после индекса разделения из текущего раздела
  4. Вставьте все элементы во вновь созданный раздел.

Для объединения секций можно использовать обратную идею.

Вот решение:

func splitSection(at index: IndexPath) {
    # first get a list of deleted and inserted indices as a result of splitting
    let (deleted, inserted) = self.document.splitSection(at: index)

    if let cv = self.collectionView {
      cv.performBatchUpdates({
        let N = self.document.numberOfSection
        // now move over the sections to make space for one more section.
        for idx in index.section+1..<N-1 {
          cv.moveSection(idx, toSection: idx+1)
        }
        // add a new section
        cv.insertSections(IndexSet.init(integer: index.section+1))

        // now perform item movements to finish splitting
        cv.deleteItems(at: deleted)
        cv.insertItems(at: inserted)
      }, completion: { (_) in
        self.document.updateSections()
      })
    }
  }
0 голосов
/ 12 апреля 2019

в функции numberOfSections возвращают 2 затем в функции cellforitemat используйте переключатель indexpath.section

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