Specify row and column number for UICollectionView

前端 未结 5 1696
失恋的感觉
失恋的感觉 2021-01-03 23:25

I want to show a UICollectionView which contains exactly 2 rows and 100 cells in each row.

// 1
- (NSInteger)collectionView:(UICollectionView *)view numberOf         


        
相关标签:
5条回答
  • 2021-01-03 23:37

    Try this:

    // 1
    - (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section {
    
        return 2;
    }
    // 2
    - (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView {
        return 100;
    }
    // 3
    - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
        MyCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
    
            cell.lbl.text = @"Data";
    
        return cell;
    }
    
    0 讨论(0)
  • 2021-01-03 23:43

    For Swift : 3 Rows per Column (By using @SakhshiSingla Answer)

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
      return 1
    }
    
    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 3
    }
    
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
        {
            return CGSize(width: collectionView.frame.size.width/3.2, height: 100)
        }
    
    0 讨论(0)
  • 2021-01-03 23:51

    The Number of sections dictates how many cells will be in each row, assuming the cell size allows for it.

    A section will always start a new row.

    0 讨论(0)
  • 2021-01-03 23:52

    The more general approach to achieve n columns in collection view which is compatible in any orientation is

     func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    
       // flow layout have all the important info like spacing, inset of collection view cell, fetch it to find out the attributes specified in xib file
       guard let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout else {
            return CGSize()
        }
    
        // subtract section left/ right insets mentioned in xib view
    
        let widthAvailbleForAllItems =  (collectionView.frame.width - flowLayout.sectionInset.left - flowLayout.sectionInset.right)
    
        // Suppose we have to create nColunmns
        // widthForOneItem achieved by sunbtracting item spacing if any
    
        let widthForOneItem = widthAvailbleForAllItems / nColumns - flowLayout.minimumInteritemSpacing
    
    
        // here height is mentioned in xib file or storyboard
        return CGSize(width: CGFloat(widthForOneItem), height: (flowLayout.itemSize.height))
     }
    
    0 讨论(0)
  • 2021-01-03 23:56

    For 3 cells per row .. Add this code.

    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    {
         return CGSizeMake(collectionView.frame.size.width/3.2 , 100);
    }
    
    0 讨论(0)
提交回复
热议问题