I have header (a UICollectionReusableCell) in a UICollectionView whose height needs to be variable. How can I have it resize itself according to the height of its contents?
I do not need to support iOS 7, and Autolayout solutions are preferable (if they exist).
This is how I solved it. I wish it was more elegant.
UILabel
in the header view to have anumberOfLines
value of 0. This will let it resize itself.collectionView(_:layout:referenceSizeForHeaderInSection:)
instantiate a header from the xib. We'll use it to compute a size.setNeedsLayout
andlayoutIfNeeded
.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
to compute the height.Notes:
The header must be moved out of the storyboard and into a xib because calling
dequeuReusableSupplementaryViewOfKind
fromsystemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
causes a crash.The header view must be able to compute a correct height only knowing its content and the desired width. This took some fiddling with the constraints.
Here would be my approach -
In your View Controller -
In your View Cell -