Pregunta Cómo configurar UICollectionViewDelegateFlowLayout?


Un UIViewController mantiene una referencia a un UICollectionView. El controlador debe modificar el diseño de flujo incorporado utilizando UICollectionViewDelegateFlowLayout.

Es bastante fácil establecer la fuente de datos de la vista en uno mismo:

MyViewController.m

- (void)viewDidLoad
{
    self.collectionView.dataSource = self;
}

Pero, ¿cómo configuro el controlador para que sea el diseño de flujo delegado de la vista?

- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    // self.collectionView.??? = self; 
}

He intentado:

- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    self.collectionView.collectionViewLayout = self; 
}

Pero me aparece el error: "Asignación de tipos de punteros incompatibles ...".

El archivo de encabezado de colección se ve así:

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

75
2017-10-17 00:08


origen


Respuestas:


Sólo self.collectionView.delegate = self;. Tenga en cuenta que UICollectionViewDelegateFlowLayout hereda de UICollectionViewDelegate.

Admito que al principio puede pillar desprevenido.

Ah, y esto solo funcionará si self.collectionView.collectionViewLayout está configurado en su diseño de flujo (o establecer con initWithFrame:collectionViewLayout:)


191
2017-10-17 00:38



De acuerdo con la respuesta anterior solo ejemplo de uso. Realmente no está claro, pero puedo mostrar cómo funciona:

@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

9
2018-04-06 13:06