[Résolu] Collapse d'une collectionViewCell?

LouLou Membre
mars 2015 modifié dans API UIKit #1

Salut,


 


j'aimerais avoir une liste de collectionViewCell qui affichent des images, et quand on clique sur une image, une vue (blanche) s'affiche entre deux images.


 


J'ai pensé placer chaque cell au départ (1 image, 1 vue blanche, et ainsi de suite) et jouer sur la frame de la cell blanche. Mais ça ne marche pas, la cell blanche laisse un trou à  la place. Sauriez-vous comment faire cet effet?


 


Voici le code de chaque cell :



func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

if indexPath.row % 2 == 0{
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CellImage", forIndexPath: indexPath) as MyCell
cell.frame.origin.x = 0
cell.imageView.image = photos[indexPath.row/2]
cell.addGestureRecognizer(tap)
println("cell.frame : \(cell.frame)")
return cell
} else {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CellBlank", forIndexPath: indexPath) as CellBlank
cell.frame = CGRectZero
cell.labels = labels
cell.backgroundColor = UIColor.whiteColor()
return cell
}
}

Merci


Réponses

  • AliGatorAliGator Membre, Modérateur
    C'est la tableView qui règle la frame des cellules elle-même (bien en dehors du cellForRow) en fonction de la hauteur des cellules que tu indiques :


    - soit via la valeur que tu as mis dans la propriété tableView.rowHeight si tu veux que toutes tes cellules aient la même hauteur

    - soit via la valeur que tu renvoies dans ton implémentation de tableView(heightForRowAtIndexPath:) si t'es cellules doivent avoir une hauteur différente selon leur indexPath (comme dans ton cas pour tes cellules blanches)


    Voir le TableView Programming Guide dans la doc Apple qui explique toutes les bases et concepts de UITableView, ainsi que la doc de UITableViewDelegate
  • Joanna CarterJoanna Carter Membre, Modérateur
    Coucou Ali, Lou parle d'une UICollectionView ;)
  • LouLou Membre

    Super, merci. Exact Joanna, ce n'est pas possible avec une collectionView? C'est pas grave, j'ai utilisé une tableview et ça marche bien.


  • AliGatorAliGator Membre, Modérateur
    mars 2015 modifié #5
    Effectivement j'avais lu un peu vite. Mais ça change pas trop le problème en fait, c'est le même principe : c'est UICollectionView, ou plutôt son UICollectionViewLayout, qui définit la frame de la cell, de sorte de tout seul disposer ses cellules au bon endroit. Donc là  aussi c'est normal que même si tu changes la frame d'une cell dans cellForRowAtIndexPath, cette frame soit écrasée par le UICollectionViewLayout !

    Et encore une fois c'est via ton implémentation des méthodes de delegate que tu peux indiquer des hauteurs/tailles particulières pour certaines cellules plutôt que d'autre si tu ne veux pas qu'elles aient toutes la même taille, tout comme pour les UITableViews.

    Dans le cas d'un UICollectionView utilisant un layout UICollectionViewFlowLayout (le cas le plus courant, et celui par défaut, où les cellules sont mises côte à  côte puis passent à  la ligne de haut en bas), c'est donc les méthodes de UICollectionViewDelegateFlowLayout qui te permettent ça, notamment avec la méthode "- collectionView:layout:sizeForItemAtIndexPath:"

    Donc en somme exactement le même principe de base que celui que j'ai décrit pour UITableView.
  • LouLou Membre

    Exact, merci.


Connectez-vous ou Inscrivez-vous pour répondre.