Хорошо. Поэтому я думаю, что решил проблему после различных экспериментов. Вот окончательное решение на случай, если кто-то еще попадет в эту проблему.
Основная идея:
- Переместить все разделы после разделения на 1
- Вставить раздел после разбиения раздела
- Удалить все элементы после индекса разделения из текущего раздела
- Вставьте все элементы во вновь созданный раздел.
Для объединения секций можно использовать обратную идею.
Вот решение:
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()
})
}
}