In a CollectionView
, some cells should have an additional subview or layer. The CollectionView
can be told to resize it's cells, thus all content needs to resize appropriately.
Currently, the cell is initialized from a nib containing a cell with imageview; the cell nib is linked to a custom UICollectionViewCell
subclass, that only does the init. Autoresize subviews is checked.
The CollectionView
is told to resize the cell by a value derived and returned in sizeForItemAtIndexPath:
. I have subclassed a FlowLayout but it only specifies ScrollDirection
and Insets
.
All of that is working fine. Problem: How do I add subview/layer to the cell so it also resizes correctly? I tried adding subviews and layers with translatesAutoresizingMaskIntoConstraints
off, but these do not automatically change size at all. Also tried to use code frame/view instead of nib.
The best I got now is a cell.contentView.layer
sublayer which I add in cellForItemAtIndexPath:
; that is "manually" resized by storing the cell's frame.size
from sizeForItemAtIndexPath:
, which is not only ugly but also ends up with the sublayer having various sizes for different cells.
Any help appreciated!
First you have to Add the UICollectionViewDelegateFlowLayout delegate and then use following delegate method it will work fine for me. Show activity on this post. Implement the below method,, it is autoresized base on the screen you have.
Try to use UICollectionViewDelegateFlowLayout method. In Xcode 11 or later, you need to set Estimate Size to none from storyboard. Show activity on this post. You can put the width and height you want in the CGSize constructor.
The collection view presents items onscreen using a cell, which is an instance of the UICollectionViewCell class that your data source configures and provides. In addition to its cells, a collection view can present data using other types of views.
From apple's documentation, UICollectionView is: An object that manages an ordered collection of data items and presents them using customizable layouts. The name and definition makes it clear, it is a way to display a Collection of UI Views in our app.
I ran into the same issue just now.
When using the UICollectionViewFlowLayoutDelegate method to set the cell size depending on device and device-orientation, the size would be calculated properly but subviews would not resize to fill the newly size cell. The effect was a large blank cell with small subviews that don't fill the cell's bounds / remain the size equal to their current value in the xib file.
I solved this by doing the following in awakeFromNib
:
- (void)awakeFromNib { [super awakeFromNib]; self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; self.contentView.translatesAutoresizingMaskIntoConstraints = YES; }
Prior to doing this, the contentView mask was nil
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With