it-swarm.com.ru

UICollectionView отображает 3 элемента в строке

У меня есть UICollectionView, созданный из раскадровки,

Я хочу иметь 3 элемента в строке. Мне удалось сделать это, используя следующее:

    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(collectionView.frame.size.width/3.6 , (collectionView.frame.size.height-100)/2);
}

Тем не менее, если у меня есть 6 элементов, я получил 2 строки по 3 элемента в каждой . Но когда у меня есть 4 элемента, он отобразит 2 строки по 2 элемента в каждой.

Можно ли отобразить их в 2 ряда, первый из которых содержит 3 элемента, а второй содержит только 1 элемент?

7
Iphone User

здесь я сделал это, я реализовал UICollectionViewDelegateFlowLayout на UICollectionView добавить следующий метод . это работает, используйте его.

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    float cellWidth = screenWidth / 3.0; //Replace the divisor with the column count requirement. Make sure to have it in float.
    CGSize size = CGSizeMake(cellWidth, cellWidth);

    return size;
}

этот метод работает как ширина экрана, деленная на 3.

9
Hiren Dhamecha
(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
  CGRect screenRect = [[UIScreen mainScreen] bounds];
  CGFloat screenWidth = screenRect.size.width;
  float cellWidth = screenWidth / 3.2; //Replace the divisor with the column count requirement. Make sure to have it in float.
  CGFloat screenHeight = screenRect.size.height;
  float cellHeight = screenHeight/3.0;


  CGSize size = CGSizeMake(cellWidth, cellHeight);


  return size;
}

Применить приведенный ниже код тоже - (viewWillTransitionToSize)

(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
  [self.collectionView/*(that's my collection view name)*/ reloadData];
}

Этот код поможет получить то же самое нет. ячеек в портретной, а также в ландшафтном режиме также . Я применил приведенный выше код, чтобы получить 3 ячейки в портретной, а также 3 ячейки в ландшафтном режиме.

2
Shashwat Tyagi
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    return CGSizeMake(self.collectionView.bounds.size.width/3, self.collectionView.bounds.size.width/3);
}

Самая важная вещь, которую нужно сделать, это инспектор размера collectionView, установив минимальный интервал для ячейки и строки равным 0

1
Vinayak Pal

попробуй это 

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(self.view.frame.size.width/3 -10 , (collectionView.frame.size.height-100)/2);
}
1
KKRocks

Сначала необходимо рассчитать доступное пространство для содержимого, а затем разделить его на количество элементов, которые вы хотите представить в строке.

Вот пример, предполагающий, что UICollectionView занимает всю ширину экрана

private let numberOfItemPerRow = 2

private let screenWidth = UIScreen.main.bounds.width
private let sectionInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
private let minimumInteritemSpacing = CGFloat(10)
private let minimumLineSpacing = CGFloat(10)

// Calculate the item size based on the configuration above  
private var itemSize: CGSize {
    let interitemSpacesCount = numberOfItemPerRow - 1
    let interitemSpacingPerRow = minimumInteritemSpacing * CGFloat(interitemSpacesCount)
    let rowContentWidth = screenWidth - sectionInset.right - sectionInset.left - interitemSpacingPerRow

    let width = rowContentWidth / CGFloat(numberOfItemPerRow)
    let height = width // feel free to change the height to whatever you want 

    return CGSize(width: width, height: height)
}
0
Aladin