Display just two columns, with multiple rows in a CollectionView using storyboard

后端 未结 3 416
我寻月下人不归
我寻月下人不归 2021-02-01 04:41

I want to display only two cells in a row, no matter what the iPhone screen size is. Like,

My storyboard contains a UICollectionView,connected by constrain

相关标签:
3条回答
  • 2021-02-01 05:03

    You need not check the device size because we can use the collectionView width to calculate the width of the cell. Using the cell width you can calculate the height as per your need.

    One more thing: You need to use UICollectionViewDelegateFlowLayout & confirm the delegate & implement method below

      func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    
       let padding: CGFloat =  50
       let collectionViewSize = collectionView.frame.size.width - padding
    
       return CGSizeMake(collectionViewSize/2, collectionViewSize/2)
    
    }
    

    Update: Swift 4.0

      func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            let padding: CGFloat =  50
            let collectionViewSize = collectionView.frame.size.width - padding
    
            return CGSize(width: collectionViewSize/2, height: collectionViewSize/2)
        }
    

    Note: I have answered the question considering the cells are square sized

    0 讨论(0)
  • 2021-02-01 05:05
    - (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    {
    CGFloat padding = 50;
    CGFloat cellSize = collectionView.frame.size.width - padding;
    return CGSizeMake(cellSize / 2, cellSize / 2);
    }
    
    0 讨论(0)
  • 2021-02-01 05:17

    Xcode 8: Swift 3

    I know this is an older question, but I found a few issues with accepted answer.

    I had to use UICollectionViewDelegateFlowLayout which is not CollectionViewFlowLayout

    Then

    In it 'Padding' is of type Int and when you try to subtract it from the variable collectionViewSize it throws an error because they are different types. Very easy to fix however.

    I just added : CGFloat to the line

    Finally, while there is probably a better way to do it, I had to match the padding by adjusting the collectionView leading and trailing constraints.

    So all in all this is what my code ended up looking like

    extension LandingPageViewController: UICollectionViewDelegateFlowLayout {
    
      func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    
        let padding: CGFloat = 25
        let collectionCellSize = collectionView.frame.size.width - padding
    
      return CGSize(width: collectionCellSize/2, height: collectionCellSize/2)
    
       }
    
    }
    
    0 讨论(0)
提交回复
热议问题