UICollectionView のセルサイズを指定しても反映されない時
検証環境:
Xcode 12.4
Swift 5.3.2
UICollectionView のセルサイズを、
UICollectionViewFlowLayout.itemSize
プロパティ- または
UICollectionViewDelegateFlowLayout
デリゲートのcollectionView(_:layout:sizeForItemAt:)
メソッド
を実装してセルサイズ(CGSize)を指定しても、contentView に張り付けた UIImageView の制約の方が優先されて指定したセルサイズにならない現象が起きた。
原因はどうやら UICollectionViewCell の Self Sizing 機能が有効になり、セル内の AutoLayout の制約に従って自動計算されたセルサイズが優先されるらしい。
これを回避する方法はセルの推定サイズestimatedItemSize
プロパティにデフォルトでUICollectionViewFlowLayout.automaticSize
が指定されているのでこれを 0 に変更すればよい。
コードでやる場合
let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout flowLayout.estimatedItemSize = .zero
または
@IBOutlet weak var flowLayout: UICollectionViewFlowLayout! { didSet { flowLayout.estimatedItemSize = .zero } }
StoryBoard でやる場合