Why on Xcode 11, UICollectionViewCell changes size as soon as you scroll (I already set size in sizeForItem AtIndexPath:)?

IosSwiftXcodeUicollectionviewUicollectionviewcell

Ios Problem Overview


enter image description here

I have collectionview inside tableview cell and I use nib for my collection view cell (in which I use autolayout for my imageview and labels and it is on Freeform mode). I'm setting cell size in tableviewcell class which is handling the delegate for collectionview inside it by this method:

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 200, height :150)        
    }

It always works but after Xcode 11 it doesn't.

Ios Solutions


Solution 1 - Ios

I have the same problem. And my solution is to change the Estimate size to None in the Xcode 11.

enter image description here

Solution 2 - Ios

You set collectionview Estimate size to None in Xcode 11. The reason for this is that cells in a UICollectionView can now self-size with Auto Layout constrained views in the canvas. To opt into the behavior for existing collection views, enable “Automatic” for the collection view’s estimated size, and “Automatic” for cell’s size from the Size inspector.

If deploying before iOS 13, you can activate self sizing collection view cells by calling performBatchUpdates(_:completion:) during viewDidLoad()

Ref: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_release_notes

Solution 3 - Ios

As Anh Tuan said in another answer here, you just need to change the Estimate Size to none in the Size Inspector of the Collection View from the Storyboard.

But if you wanna do this programmatically, you can try this code:

    let layout = myCollectionViewReferenceHere.collectionViewLayout as! UICollectionViewFlowLayout
    layout.estimatedItemSize = .zero

Solution 4 - Ios

This problem is coming in Xcode 11. Go to the attribute inspector and change the estimateSize to None. will fix every thing.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionReza.AbView Question on Stackoverflow
Solution 1 - IosTuan NguyenView Answer on Stackoverflow
Solution 2 - IostetrajenView Answer on Stackoverflow
Solution 3 - IosCarlos IranoView Answer on Stackoverflow
Solution 4 - IosTalha RasoolView Answer on Stackoverflow