tutorial example collection objective-c cocoa-touch uicollectionview

objective-c - example - uicollectionview swift 4



El encabezado UICollectionView no se muestra (2)

Estoy trabajando en un proyecto que usa un UICollectionView para mostrar varios álbumes. Los elementos se muestran bien, pero ahora quiero mostrar un encabezado sobre la primera sección.

Para hacer esto, agregué el registerNib:forSupplementaryViewOfKind:withReuseIdentifier: a mi método init. Me gusta esto:

[self.collectionView registerNib:[UINib nibWithNibName:@"AlbumHeader" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kAlbumHeaderIdentifier];

( AlbumHeader Nib contiene una vista de la clase AlbumHeader , que es una subclase de UICollectionView ).

Después de eso, implementé el método collectionView:viewForSupplementaryElementOfKind:atIndexPath :

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { return [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:kAlbumHeaderIdentifier forIndexPath:indexPath]; }

Ahora debería intentar cargar la vista de encabezado, supongo. Pero no es así, el método para la vista suplementaria no se llama.

¿Qué me estoy perdiendo? Atascado durante horas, ha leído la documentación en UICollectionView s muchas veces, pero nada parece ayudar. ¿Alguna idea?


Después de buscar el método por el que se le preguntó a Yuf, leí que, de forma predeterminada, el tamaño de los encabezados / pies de página es 0,0. Si el tamaño es 0, el encabezado / pie de página no se mostrará.

Puede establecer el tamaño con una propiedad:

flowLayout.headerReferenceSize = CGSizeMake(0, 100);

Entonces todos los encabezados tendrán el mismo tamaño. Si tiene que ser diferente para cada sección, puede implementar el siguiente método, que es parte del protocolo UICollectionViewDelegateFlowLayout .

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { if (section == albumSection) { return CGSizeMake(0, 100); } return CGSizeZero; }

Tenga en cuenta que en el desplazamiento vertical utiliza la height devuelta y el ancho total de la vista de colección, en el desplazamiento horizontal utiliza el width retorno y el alto completo de la vista de colección.


Implementaron:

- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

Hay una tonelada de métodos para implementar solo para que una cosa funcione ... También estoy aprendiendo. Dime si funciona

Editar: Lo siento método equivocado. Eso es para crear subclases, creo. El que estoy hablando está en UICollectionViewLayout (el objeto de disposición que subclase, si su diseño admite vistas suplementarias):

- layoutAttributesForSupplementaryViewOfKind:atIndexPath:

Consulte aquí: https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UICollectionViewLayout_class/Reference/Reference.html#//apple_ref/occ/cl/UICollectionViewLayout