 <p>So after two days of research I cant find a proper solution to this issue i managed to bypass it by setting the cell frame in <em>layoutAttributesForElementsInRect</em> like this:</p> <pre><code> UICollectionViewCell* cell = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:[attributesForElementsInRect indexOfObject:attributes] inSection:0]]; if (!CGRectEqualToRect(cell.frame, refAttributes.frame)) cell.frame = refAttributes.frame; </code></pre> <p>this is the complete function</p> <pre><code>- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { NSArray* attributesForElementsInRect = [super layoutAttributesForElementsInRect:rect]; NSMutableArray* newAttributesForElementsInRect = [[NSMutableArray alloc] init]; // use a value to keep track of left margin CGFloat leftMargin = 0.0; for (id attributes in attributesForElementsInRect) { UICollectionViewLayoutAttributes* refAttributes = attributes; // assign value if next row if (refAttributes.frame.origin.x == self.sectionInset.left) { leftMargin = self.sectionInset.left; } else { // set x position of attributes to current margin CGRect newLeftAlignedFrame = refAttributes.frame; newLeftAlignedFrame.origin.x = leftMargin; refAttributes.frame = newLeftAlignedFrame; } // calculate new value for current margin leftMargin += refAttributes.frame.size.width + 8; [newAttributesForElementsInRect addObject:refAttributes]; UICollectionViewCell* cell = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:[attributesForElementsInRect indexOfObject:attributes] inSection:0]]; if (!CGRectEqualToRect(cell.frame, refAttributes.frame)) cell.frame = refAttributes.frame; } } </code></pre> <p>Hope this will help somebody or someone have a better solution </p>