UICollectionView 3 column grid, 1px space?? (image included)

前端 未结 4 437
陌清茗
陌清茗 2020-12-31 04:04

I have setup a UICollectionView with a FlowLayout that leaves no space in between cells in either the vertical or horizontal directions.

I have everything working, y

相关标签:
4条回答
  • Better avoid number's double type in similar situations. Use:

    return CGSizeMake(ceil(totalWidth), ceil(totalHeight))
    
    0 讨论(0)
  • 2020-12-31 04:23

    For example you have screen width = 320, when you divide it by 3 you have 106.6666. If consider it as Int, we have: 106 * 3 = 318. We need 2 pixel to be added by 1 px to first two cells because 320 - 318 = 2. Try this solution below.

    public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let columns = 3 
        let width = Int(UIScreen.main.bounds.width)
        let side = width / columns
        let rem = width % columns
        let addOne = indexPath.row % columns < rem
        let ceilWidth = addOne ? side + 1 : side
        return CGSize(width: ceilWidth, height: side)
    }
    
    0 讨论(0)
  • 2020-12-31 04:28

    I was having the same problem, I fixed it with the code below:

     func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    
        let paddingSpace = sectionInsets.left * 4
        let availableWidth = view.frame.width - paddingspace
        let widthPerItem  = availableWidth/3
    
        return CGSizeMake(width: widthPerItem, height: widthPerItem)
    }
    

    and define the variable below in the begin of your class:

    fileprivate let sectionInsets = UIEdgeInsets(top: 0.0, left: 0.5, bottom: 0.0, right: 0.0)
    
    0 讨论(0)
  • 2020-12-31 04:30

    Here is my solution to issue just make middle cell of width 106 and other two with width 107 in method collectionView layout

    NSInteger numColumns = 3;
    CGSize deviceSize;
    CGFloat width = self.view.frame.size.width / numColumns;
    CGFloat height = width ;
    NSInteger rem = (int)self.view.frame.size.width%numColumns; 
    if(indexPath.row == (1 + numColumns*counter) && rem != 0) {  
    
        deviceSize = CGSizeMake(floor (width), ceil(height));
        counter++;
    }
    else {
    
        deviceSize = CGSizeMake(ceil (width), ceil(height));
    }
    deviceSize = CGSizeMake(deviceSize.width, deviceSize.height);
    
    0 讨论(0)
提交回复
热议问题