2017-08-01 1 views
1

J'ai une application avec un écran qui est divisé en quatre cellules égales. Chaque cellule a une image, une étiquette et une couleur. J'essaie d'ajouter les images, mais pour une raison quelconque, seule l'image de la première cellule fonctionne.UIImageView dans UICollectionView ne dessine pas correctement

Il ressemble à ceci maintenant: enter image description here

Voici mon code: En ViewController.swift:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    colorArray += [UIColor.red, UIColor.blue, UIColor.green, UIColor.yellow] 

    pictureArray += [UIImage(named: "budget")!, UIImage(named: "journey")!, 
        UIImage(named: "learn")!, UIImage(named: "settings")!] 

    titleArray += ["Budget", "Journey", "Learn", "Settings"] 
} 

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    return 4 
} 

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as UICollectionViewCell 


    // Set cell properties 
    cell.backgroundColor = colorArray[indexPath.row] 

    let imageview:UIImageView=UIImageView(image: pictureArray[indexPath.row]) 
    let size = CGSize(width: 100, height: 100) 
    imageview.center = cell.center 
    imageview.bounds = CGRect(origin: cell.bounds.origin, size: size) 

    cell.contentView.addSubview(imageview) 

    let label = cell.viewWithTag(1) as! UILabel 
    label.text = titleArray[indexPath.row] 

    return cell 
} 

Les étiquettes et les couleurs fonctionnent très bien, mais pour une raison quelconque, les vues d'images semblent être hors de l'écran. J'ai le sentiment que les restrictions de mon centre/limite obligent les images de l'écran, mais j'ai essayé beaucoup de combinaisons, et aucune d'elles ne semble fonctionner pour moi.

Comment est-ce que je devrais faire ceci?

+1

Ce sera mieux si vous utilisez des cellules prototypes. Avez-vous essayé de voir la hiérarchie de vue? –

+0

Placez une autre image au début de pictureArray et vérifiez si cette image est également dessinée dans la première cellule? – 3stud1ant3

+0

@YogeshSuthar J'ai créé ma propre sous-classe de UICollectionViewCell avec un IBOutlet pour l'image et le titre et cela a fonctionné! Je vous remercie! –

Répondre

0

Je publie la bonne réponse pour qui ira jamais google ici. (Et parce qu'il a été résolu il y a une heure sans que personne affichant la réponse)

La meilleure pratique consiste à sous-classe UICollectionViewCell, connecter tous les points de vente (étiquette, l'image, etc.) et de travailler avec cette classe sur les cellules

bonne chance à tous

0

C'est ce qui a fonctionné, après le commentaire de Yogesh Suthar:

Je UICollectionViewCell sous-classé, connecté l'image et l'étiquette:

class NavigationCollectionViewCell: UICollectionViewCell { 
    @IBOutlet weak var navImage: UIImageView! 
    @IBOutlet weak var navLabel: UILabel! 
} 

Ensuite, dans le ViewController, je l'ai fait:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! NavigationCollectionViewCell 


    // Set cell properties 
    cell.backgroundColor = colorArray[indexPath.row] 

    cell.navImage.image = imageArray[indexPath.row] 

    cell.navLabel.text = titleArray[indexPath.row] 

    return cell 
} 

Définissez la taille et la position de l'image et l'étiquette en Main.storyboard!