UICollectionView每行显示3个项目

我有一个从故事板创build的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?

在这里我做到了,我在UICollectionView上实现了UICollectionViewDelegateFlowLayout添加以下方法。 它的工作,使用它。

 - (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。

 (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个单元格。

尝试这个

  - (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); } 
 - (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的大小检查器中为cell&line设置最小间距为0

我知道这么晚了,但我目前使用和处理这种情况下的解决scheme是通过使用KRLCollectionViewGridLayout如下

  KRLCollectionViewGridLayout* aFlowLayout = [[KRLCollectionViewGridLayout alloc]init]; aFlowLayout.aspectRatio = 1; aFlowLayout.sectionInset = UIEdgeInsetsMake(2, 2, 2, 2); aFlowLayout.interitemSpacing = 2; aFlowLayout.lineSpacing = 2; aFlowLayout.numberOfItemsPerLine = 3; aFlowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.heigh) collectionViewLayout:aFlowLayout]; 

你可以使用这个链接findKRLCollectionViewGridLayout库类