How to set UICollectionViewDelegateFlowLayout? How to set UICollectionViewDelegateFlowLayout? ios ios

How to set UICollectionViewDelegateFlowLayout?


Just self.collectionView.delegate = self;. Note that UICollectionViewDelegateFlowLayout inherits from UICollectionViewDelegate.

I admit it caught me off guard at first.

Oh and this will only work if self.collectionView.collectionViewLayout is actually set to your flow layout. (or set with initWithFrame:collectionViewLayout:)


According to previous answer just example of use. It really not clear but I can show how it works:

@interface PrettyViewController()<UICollectionViewDelegateFlowLayout, UICollectionViewDataSource>    //some code@end@implementation PrettyViewController- (void)viewDidLoad {    [super viewDidLoad];    self.collectionView.delegate = self;//bingo! right here}#pragma mark - UICollectionViewDelegateFlowLayout- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {    return CGSizeMake([[UIScreen mainScreen] bounds].size.width, 20.0);}@end


My two cents for macOS Mojave - Swift

(I've fallen here searching for NSCollectionView... I do know question was about UICollectionView..)

All said above (specifying delegate implies cell size, too) is correct for macOS, too.

NOTE: If You write:

class MyViewController:    NSCollectionViewDelegate,    NSCollectionViewDataSource,    **NSCollectionViewDelegateFlowLayout** {

the method:

func collectionView(_ collectionView: NSCollectionView,                       layout collectionViewLayout: NSCollectionViewLayout,                sizeForItemAt indexPath: IndexPath) -> NSSize

will be called.

If removed, no delegate method will be called. (as class does not obey to the protocol).