UICollectionView et line separator ?

Salut tout le monde,

Je reviens par ici car j'ai un petit soucis..
J'ai une UiCollectionView (2 cellules par ligne).. il y a une icône et un texte sur chaque cellule, le tout sur un fond blanc.

J'aimerai délimité ces cellules par des lignes qui l'entour.. (en gros, les bords de la cellule en noir).. mais je n'arrive pas à trouver une option qui le fait simplement.. je me dis que c'est tellement courant qu'il doit y avoir une façon simple de le faire (plutôt que de créer les lignes manuellement et leur donner des contraintes pour coller au bord de la cellule)..

Quelqu'un à une idée pour faire ça simplement ? Une option que j'aurai loupé ? Une case à cocher qui fait tout directement ?

Merci de votre aide :)

Réponses

  • LarmeLarme Membre
    avril 2018 modifié #2

    CALayer donne la possibilité de rajouter un contour.
    De mémoire, je ferais ainsi :
    Dans awakeFromNib/initWithFrame: (l'une de ces dernières devraient être appelées normalement, en fonction de ton implémentation, cf. dequeueCell de UICollectionView pour être sûr).

    self.contentView.layer.borderWidth = 1.0
    self.contentView.layer.borderColor = [UIColor blackColor].CGColor
    
  • J'ai mis ça dans cellForItemAtet ça fonctionne bien..

    cell.layer.borderWidth = 1.0
    cell.layer.borderColor = UIColor.black.cgColor
    

    Bon par contre, c'est pas vraiment aligné et tout ça mais j'vais bien trouver comment faire ^^
    Merci de ton aide ^^

  • Bon bah je galère sur l'alignement..

    Voilà à quoi ressemble mon application et je n'arrive pas a centrer les cellules.. la marge au milieu est beaucoup trop grosse et je n'arrive pas a coller les cellules..
    Une idée de comment je peux faire ? :)

  • Pas facile de te répondre sans savoir comment tu as réalisé tes contraintes. Tu peux nous donner une idée du résultat désiré ?

  • Je voulais juste que les cellules soient collées.. là il y a une grande marge au milieu et ça m'embête un peu..

    Je posterai des screens de mes contraintes demain, ça sera surement plus clair (là j'ai plus trop le temps ^^)

  • De mémoire, c'est normal.
    Le comportement d'un UICollectionViewFlowLayout avec deux éléments peut donner ça.
    Un coup rapide serait de donner un offset à ta collection (qu'elle ne prenne pas toute la largeur).
    Ou de changer l'espace entre les items, et potentiellement de calculer leur taille en fonction de la taille de la collectionview.

  • Merci Larme, du coup j'ai cherché dans ce sens là et ça a fonctionné :)

    J'ai commencé par déclarer 2 variables :

    var screenSize = CGRect(x:0, y:0, width:0, height:0)
    var screenWidth: CGFloat = 0.0
    

    Puis dans viewDidLoad, j'ai calculé la taille de l'écran et j'ai diviser par le nombre d'items que je voulais par ligne..

    screenSize = UIScreen.main.bounds
    screenWidth = screenSize.width // taille de l'écran en largeur
    let layout : UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top:10, left:0, bottom:10, right:0) // ici on place les marges
    layout.itemSize = CGSize(width:screenWidth/2, height:160) // 2 = nombre d'item par ligne, 160 = hauteur d'un item
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    collectionView.collectionViewLayout = layout // on applique le layout sur la collectionView 
    

    Et hop, ça fonctionne, j'ai bien 2 items par ligne et plus de marge bizarre au milieu :)

    Merci ^^

  • De mémoire ta solution est bonne, car c'est comme cela que j'avais fait par contre fais attention à la rotation du device...

  • J'ai pas de rotation sur l'appli et ça m'arrange bien pour le coup :p

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