How to set UICollectionViewDelegateFlowLayout?

前端 未结 3 1762
深忆病人
深忆病人 2020-12-14 05:14

A UIViewController maintains a reference to a UICollectionView. The controller should modify the built-in flow layout using the UICollectionViewDelegateFlowLayout.

I

相关标签:
3条回答
  • 2020-12-14 05:49

    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).

    0 讨论(0)
  • 2020-12-14 05:54

    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:)

    0 讨论(0)
  • 2020-12-14 06:03

    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
    
    0 讨论(0)
提交回复
热议问题