Мне нужно создать UICollectionView
с ячейками разных размеров (1x1, 2x2, 2x1, 3x2.5). У меня уже есть код для добавления ячеек в зависимости от того, какой размер они используют collectionView:layout:sizeForItemAtIndexPath:
.Заказ ячеек в UICollectionView
Вот ожидаемый результат (ячейки 1 и 3 должны быть слева от ячейки 2):
Но текущий результат является:
Мой (некрасиво) текущий код (self.cellSize = ширина экрана/3):
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGFloat size = self.cellSize;
if (indexPath.item == 0) {
return CGSizeMake(self.cellSize * 3.f, self.cellSize * 2.5f);
}
if (indexPath.item == 1) {
return CGSizeMake(self.cellSize, self.cellSize);
}
if (indexPath.item == 2) {
return CGSizeMake(self.cellSize * 2.f, self.cellSize * 2.f);
}
if (indexPath.item == 3) {
return CGSizeMake(self.cellSize, self.cellSize);
}
if (indexPath.item == 4) {
return CGSizeMake(self.cellSize * 2.f, self.cellSize);
}
if (indexPath.item == 5) {
return CGSizeMake(self.cellSize, self.cellSize);
}
if (indexPath.item == 6) {
return CGSizeMake(self.cellSize, self.cellSize);
}
if (indexPath.item == 7) {
return CGSizeMake(self.cellSize * 2.f, self.cellSize);
}
if (indexPath.item == 8) {
return CGSizeMake(self.cellSize * 3.f, self.cellSize * 2.5f);
}
return CGSizeMake(size, size);
}
есть ли способ, чтобы указать, что ячейка 3 должен быть выше ячейки 1, но с левой стороны от с ell 2?
Я не хочу делать статический макет, который не изменится, потому что каждая ячейка может иметь разный размер в будущем. Например, ячейка 2 может быть размером 2x1 ...
Какой из лучших способов сделать это? Я ожидал указать на UICollectionViewLayout
поток (например, «сверху»), но он не работает так ...
Я думаю, что вам нужно подклассифицировать 'UICollectionViewLayout', где вы дадите каждой ячейке свой фрейм. – Larme