Что бы я сделал, это:
1) Сортируйте данные так же, как вы делаете это сейчас, чтобы представление вашей коллекции выглядело так:
---------
|0|2|4|6|
---------
|1|3|5|7|
---------
2) Вваш cellForIndexPath
метод источника данных представления вашей коллекции возвращает правильный элемент, чтобы представление вашей коллекции превратилось в следующее:
---------
|0|1|2|3|
---------
|4|5|6|7|
---------
Для этого вы можете использовать следующую логику:
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var elementIndex: Int!
if indexPath.row % 2 == 0 {
// 0 / 2 = 0
// 2 / 2 = 1
// 4 / 2 = 2, etc
elementIndex = indexPath.row / 2
}
else {
// (1 / 2) + round(8.0 / 2.0) = 4
// (3 / 2) + round(8.0 / 2.0) = 5
// (5 / 2) + round(8.0 / 2.0) = 6, etc
elementIndex = (indexPath.row / 2) + Int(round(Double(elements.count) / 2.0))
}
// Dequeue your cell
// let cell = ...
cell.element = elements[elementIndex]
return cell
}
В основном это должно вернуть ваши элементы в правильном порядке.