Подтвердить что ты не робот

Динамический размер UICollectionViewCell для 4,4 и 5,5 дюймов

У меня есть UICollectionView с ячейками в раскадровке. Размер каждой ячейки устанавливается равным 145x145.

Они выглядят хорошо на iPhone 4-5, но размер не увеличивается пропорционально на iPhone 6 и 6+. Вместо того, чтобы вручную устанавливать другой размер ячейки для каждого устройства, как я могу сделать это динамически?

Смотрите примеры здесь: iPhone 5S: http://prntscr.com/55vy7q, iPhone 6: http://prntscr.com/55vyy2

4b9b3361

Ответ 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]