web-dev-qa-db-fra.com

Au lieu de UICollectionView, un écran noir s'affiche

J'essaye de réimplémenter le défilement infinitif UICollectionView vu ici . Les choses qui me manquaient:

ViewController.h :

@interface ViewController : UIViewController<UICollectionViewDataSource, UICollectionViewDelegate>

@end

DataCell.h :

@interface DataCell : UICollectionViewCell
@property (nonatomic, strong) UILabel *label;
@end

DataCell.m :

#import "DataCell.h"

@implementation DataCell

-(instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if(self){
        self.label = [[UILabel alloc] initWithFrame:self.bounds];
        self.autoresizesSubviews = YES;
        self.label.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                       UIViewAutoresizingFlexibleHeight);
        self.label.textAlignment = NSTextAlignmentCenter;
        self.label.adjustsFontSizeToFitWidth = YES;

        [self addSubview:self.label];
    }

    return self;
}

@end

CustomCollectionView.h:

@interface CustomCollectionView : UICollectionView

@end

Pour l'ensemble du projet, j'ai utilisé un storyboard et un UIViewController normal. Sur ce contrôleur de vue, j'ai ajouté un UICollectionView dans Interface Builder. J'ai connecté la sortie de la vue de collection à mon contrôleur de vue et j'ai à nouveau configuré la source de données et délégué les méthodes à mon contrôleur de vue. J'ai également défini la classe personnalisée de UICollectionViewCell et l'identifiant de réutilisation dans Interface Builder.

Donc, tout devrait fonctionner mais je n'ai qu'un écran noir. Qu'est-ce qui me manque? Vous pouvez télécharger l'intégralité du projet ici .

24
testing

Vous configurez correctement le CollectionView, juste que vous avez oublié la couleur de l'étiquette :)

    [self.label setTextColor:[UIColor whiteColor]];

enter image description here

J'espère que ça aide!

24
Javier Flores Font

Vous devez définir manuellement la couleur d'arrière-plan de la vue de la collection dans le storyboard.

Par défaut, il est noir (bien qu'il ne le montre pas dans l'éditeur de storyboard)

enter image description here

5
SoliQuiD

J'ai eu le même problème. L'écran noir semble être un indicateur de l'absence de données disponibles avec la vue de collecte à afficher. Essayez de changer la couleur d'arrière-plan de la vue de collection, si cette couleur modifiée doit s'afficher, votre vue de collection fonctionne. Et puis ajoutez une vue d'image à la vue de collection avec une balise (par exemple, donnez une valeur 100 avec la valeur de balise pour la vue d'image) et avec le cellforItemAtIndexPath définissez les images sur la vue d'image. (Vous pouvez le faire avec une cellule personnalisée. Mais pour l'instant, pour obtenir le travail de vue de collection, l'affectation avec la balise pour la vue d'image convient mieux)

UIImageView * ImageView = (UIImageView *)[cell viewWithTag:100];
ImageView.image = [UIImage imageNamed:[images objectAtIndex:indexPath.row]];
4
Tony

il m'est arrivé que la collectionView et la cellule de la vue de la collection aient des arrière-plans transparents

2
Dan Precup
[self.collectionView registerNib:[UINib nibWithNibName:@"ProductCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"ProductCollectionViewCell"];

self.collectionView.backgroundColor = [UIColor clearColor];
1
Mr.Javed Multani

Dans Swift,

self.label.textColor = UIColor.whiteColor()
1
Ghulam Rasool