0

my problem is that the uicollectionview cell is moving to left when the next cell jumps to the second line and there is space in the first line (space which didnt fit to contain the next cell), how could i prevent the cell from moving to the right, even when there is still space, i need some thing like setMaximumSpace between cells (which doesnt exist) ?

here is my code :

 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = mycollectionView.dequeueReusableCellWithReuseIdentifier("CharakterCell", forIndexPath: indexPath) as CharakterCollectionViewCell

    for (var i=0 ; i<4 ; i++)
    {
        if (collectionCellIndex[i] == nil)
        {
            collectionCellIndex[i] = indexPath
            println("\(collectionCellIndex[i])")
            println(i)
            break
        }
    }

    return cell
}


func collectionView(collectionView: UICollectionView, layout collectionViewLayout:UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    var size = CGSize(width: 0, height: 0)
    var label = UILabel()
    if (selectedCharInCollectionNames[indexPath.row] == "")
    {
        size = CGSize(width: 40, height: 30)

    }
    else
    {
        label.text = selectedCharInCollectionNames[indexPath.row]
        label.sizeToFit()
        var width = label.frame.width
        size = CGSize(width: (width+25), height: 30)

    }
    label.sizeToFit()
    return size
}

private let sectionInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)

func collectionView(collectionView: UICollectionView!,
    layout collectionViewLayout: UICollectionViewLayout!,
    insetForSectionAtIndex section: Int) -> UIEdgeInsets {


        return sectionInsets
}
Wild Will
  • 75
  • 1
  • 1
  • 10

1 Answers1

0

@Kevin R answer here! solved my question

class AlignLeftFlowLayout: UICollectionViewFlowLayout {

var maximumCellSpacing = CGFloat(9.0)

override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {
    let attributesToReturn = super.layoutAttributesForElementsInRect(rect) as? [UICollectionViewLayoutAttributes]

    for attributes in attributesToReturn ?? [] {
        if attributes.representedElementKind == nil {
            attributes.frame = self.layoutAttributesForItemAtIndexPath(attributes.indexPath).frame
        }
    }

    return attributesToReturn
}

override func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes! {
    let curAttributes = super.layoutAttributesForItemAtIndexPath(indexPath)
    let sectionInset = (self.collectionView?.collectionViewLayout as UICollectionViewFlowLayout).sectionInset

    if indexPath.item == 0 {
        let f = curAttributes.frame
        curAttributes.frame = CGRectMake(sectionInset.left, f.origin.y, f.size.width, f.size.height)
        return curAttributes
    }

    let prevIndexPath = NSIndexPath(forItem: indexPath.item-1, inSection: indexPath.section)
    let prevFrame = self.layoutAttributesForItemAtIndexPath(prevIndexPath).frame
    let prevFrameRightPoint = prevFrame.origin.x + prevFrame.size.width + maximumCellSpacing

    let curFrame = curAttributes.frame
    let stretchedCurFrame = CGRectMake(0, curFrame.origin.y, self.collectionView!.frame.size.width, curFrame.size.height)

    if CGRectIntersectsRect(prevFrame, stretchedCurFrame) {
        curAttributes.frame = CGRectMake(prevFrameRightPoint, curFrame.origin.y, curFrame.size.width, curFrame.size.height)
    } else {
        curAttributes.frame = CGRectMake(sectionInset.left, curFrame.origin.y, curFrame.size.width, curFrame.size.height)
    }

    return curAttributes
}

}

Community
  • 1
  • 1
Wild Will
  • 75
  • 1
  • 1
  • 10