web-dev-qa-db-fra.com

Comment puis-je activer / désactiver les en-têtes de section dans UICollectionView par programme?

Comment puis-je activer/désactiver les en-têtes de section dans UICollectionView par programme?

Cela peut être fait facilement facilement dans Storyboard (case à cocher), mais que diriez-vous de le faire dans le code?

33
Xyand

Vous pouvez soit utiliser la méthode collectionView:layout:referenceSizeForHeaderInSection: De UICollectionViewDelegateFlowLayout et renvoyer CGSizeMake(0,0), soit définir en conséquence le headerReferenceSize de UICollectionViewFlowLayout.

Edit: headerReferenceSize est en fait la propriété que le storyboard utilise pour afficher/masquer les en-têtes. J'ai ajouté les lignes pertinentes du fichier Storyboard

Avec la case à cocher de section on:

 <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="xAt-Uo-bMl">
           <size key="headerReferenceSize" width="50" height="50"/></collectionViewFlowLayout>

Avec la case à cocher de section off

 <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="xAt-Uo-bMl">
           <size key="headerReferenceSize" width="0" height="0"/></collectionViewFlowLayout>

Éditer # 2:

De les documents officiels :

Chaque section d'une disposition de flux peut avoir son propre en-tête et pied de page personnalisés. Pour configurer l'en-tête ou le pied de page d'une vue, vous devez configurer la taille de l'en-tête ou du pied de page pour qu'elle soit différente de zéro. Vous pouvez le faire en implémentant les méthodes déléguées appropriées ou en affectant des valeurs appropriées aux propriétés headerReferenceSize et footerReferenceSize. Si la taille de l'en-tête ou du pied de page est 0, la vue correspondante n'est pas ajoutée à la vue de collection.

39
spassas

Modifiez simplement la hauteur à 0 des en-têtes que vous ne souhaitez pas afficher ...

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        return CGSizeZero;
    }else {
        return CGSizeMake(collectionView.frame.size.width,50);
    }
}
11
MiMo

Ni rien ni [UIView new] ne fonctionnent et les deux lancent la même erreur. La meilleure réponse se trouve dans Comment modifier la hauteur de la vue de pied UICollectionView par programme

2
Hammer