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


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

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


26
2017-07-03 16:15


origine


Réponses:


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

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

Case à cocher avec section sur:

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

Case à cocher avec section de

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

Edit # 2:

De les documents officiels:

Chaque section d'une présentation de flux peut avoir son propre en-tête et son 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 ne soit pas nulle. Pour ce faire, vous pouvez implémenter les méthodes de délégation appropriées ou attribuer les 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.


31
2017-07-07 08:11



Changez simplement la hauteur à 0 des en-têtes que vous ne voulez pas montrer ...

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

9
2018-06-24 17:01



Ni nil, ni [UIView new] ne fonctionnent, tous deux lancent la même erreur. La meilleure réponse est dans Comment modifier la hauteur de la vue d'ensemble UICollectionView


1
2018-01-10 06:01



Lorsque vous ne voulez tout simplement pas qu'un en-tête apparaisse, dans le

viewForSupplementaryElementOfKind

Juste return [UIView new]; quand kind == UICollectionElementKindSectionHeader:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{   
    if (kind == UICollectionElementKindSectionHeader) {
       return [UIView new]; // Or even nil, I think it would work.
    }
    ...
    return /*something else that you want to return*/ ;
}

-2
2017-07-06 04:29



Il y a une propriété nommée "isHidden" et il peut être utilisé pour masquer l'en-tête de la section lorsque cela n'est pas nécessaire.

Veuillez vous référer au code ci-dessous:

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    var reusableView : UICollectionReusableView!
    if (kind == UICollectionElementKindSectionHeader) {
        let cell = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HeaderCell", for: indexPath) as! CVHeader
        let arrayData = summary[indexPath.section]
        cell.headerLabel.text = arrayData.first as? String
        if cell.headerLabel.text == "" {
            cell.isHidden = true //this will hide the header and leave a blank space.
        }
        reusableView = cell
    }
    if (kind == UICollectionElementKindSectionFooter) {
        reusableView = nil
    }

    return reusableView
}

Le code ci-dessus masque l'en-tête sectionnel si le texte est vide. Cela fonctionne parfaitement bien sur xcode8.


-2
2017-09-11 09:03