2012-10-02 3 views
7

J'ai une CollectionView utilisant la classe FlowLayout standard avec un défilement horizontal et un en-tête et un pied de page dans chaque section.UICollectionView: Comment ajouter de l'espace entre Footer et Header?

Maintenant, il n'y a aucun pixel entre le pied de page et les vues d'en-tête (c'est-à-dire entre les sections). Je voudrais ajouter un peu d'espace entre eux, mais pas au-dessus de la première section ou après la dernière. Je ne peux donc pas simplement ajouter cet espace dans les vues d'en-tête et de pied de page.

Je me serais attendu à quelque chose comme "interSectionSpacing", mais apparemment, il n'y a pas un tel paramètre. Des idées?

Répondre

9

Il s'avère donc qu'il n'y a pas de réglage pour cela. Voici ce que j'ai fini avec:

Je définis le contenu de ma vue d'en-tête pour être aligné au bas de la vue d'en-tête elle-même, donc il semble avoir la même hauteur visible, même si je rends la vue en-tête plus grande que son contenu (la mise en page automatique rend cela vraiment facile).

Puis je régler la hauteur de l'en-tête en fonction de l'indice de section dans cette méthode de délégué de UICollectionViewFlowLayout:


#define kHeaderHeight 42 
#define kInterSectionMargin 8 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section 
{ 
    if (section == 0) { 
     return CGSizeMake(0, kHeaderHeight); 
    } 
    return CGSizeMake(0, kHeaderHeight + kInterSectionMargin); 
} 

Maintenant, il y a un peu d'espace entre les sections, mais pas avant la première section.

+1

Qu'est-ce que vous avez fait est correct - c'est exactement ce que vous êtes censé faire. Vous êtes en charge de la vue d'en-tête. Comme vous le dites à juste titre, son contenu visible et sa «hauteur» sont deux choses différentes. – matt

0

Vous pouvez définir l'espacement entre en-tête et pied de page avec le fichier Nib. Accédez à 'Inspecteur de taille' de 'Vue de la collection' et définissez la hauteur de la taille de l'en-tête à la valeur souhaitée.

+0

Je sais ce que vous essayez de faire, mais qui aussi ajouter de l'espace avant le premier en-tête –

1

Vous avez raison, il n'y a pas de "interSectionSpacing", mais il y a quelque chose de proche.

Essayez sectionInset sur votre UICollectionViewFlowLayout.

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
[flowLayout setSectionInset:UIEdgeInsetsMake(top, left, bottom, right)]; 
+0

Ceci spécifie la distance entre l'en-tête et le contenu et le contenu et les pieds de page. Mais pas entre le pied de page et en-tête, donc tout en relation, n'est pas ce que l'affiche originale avait besoin –

Questions connexes