Ответ 1
Если вы хотите, чтобы ваши ячейки настраивали свою ширину, вам нужно вычислить раскладку потока itemSize
на основе ширины вида.
-
Если все ваши ячейки будут иметь одинаковый размер, вы можете установить свойство раскладки
itemSize
:#define kCellsPerRow 2 UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout; CGFloat availableWidthForCells = CGRectGetWidth(self.collectionView.frame) - flowLayout.sectionInset.left - flowLayout.sectionInset.right - flowLayout.minimumInteritemSpacing * (kCellsPerRow - 1); CGFloat cellWidth = availableWidthForCells / kCellsPerRow; flowLayout.itemSize = CGSizeMake(cellWidth, flowLayout.itemSize.height);
Если вы хотите динамически изменять количество ячеек в строке, я предоставил эти детали в отдельном ответе.
-
Если вам нужно вычислить размеры каждой ячейки, вы можете сделать это в делегате
collectionView:layout:sizeForItemAtIndexPath:
.
Пересчитать размер элемента при изменении ориентации устройства и обновлении макета:
-
Перерисовать макет без анимации:
[self.collectionView.collectionViewLayout invalidateLayout]
-
Анимация изменений макета:
[self.collectionView performBatchUpdates:nil completion:nil]