web-dev-qa-db-fra.com

Le fond clair CollectionView ne fonctionne pas

Je développe un petit "framework" de collectionview qui se comporte comme une barre d'onglets de navigateur (pensez chrome) sur l'iPad. Le code est entièrement terminé, structure de flux personnalisée, réorganisation, etc., et est organisée comme suit:

• TabBarCollectionViewController .h/.m/.xib contient la logique élevée de la vue de collection (méthodes délégués et méthodes de source de données). J'ai le xib pour configurer les paramètres de collectionView et définir la disposition du flux personnalisé (je pourrais le faire par programme, mais bon, c'est plus facile ainsi).

• CustomFlowLayout .h/.m (sous-classe de la présentation de flux)

• TabBarCell .h/.m/.xib (sous-classe de collectionviewcell)

Ensuite, j'ajoute TabBarCVC en tant que childViewController sur mon viewController principal (ce viewController a de nombreux childViewController et sous-vues), puis en tant que sous-vue . À ce stade, tout fonctionne correctement.

Maintenant, le problème, c'est tellement stupide que je ne peux pas croire que je n'ai pas trouvé le moyen de le faire, la couleur d'arrière-plan de la collectionView ne peut pas être réglée sur clearColor . Je peux le mettre en gris ou n'importe quelle couleur, mais cela ne prend pas en charge la transparence. La couleur de fond de la cellule est également claire et fonctionne.

J'ai besoin que la collectionView soit transparente pour montrer la texture sur la vue principale derrière. Toute idée serait très appréciée, ou peut-être que je remplirai mon premier radar pour Apple.

Si je ne trouve aucune solution, je vais simplement ajouter la "capture d'écran" de la texture supposée se trouver derrière la collectionView et l'ajouter en tant qu'imageView dans la collection viewView.

30
nebuto

Ok, je me sens assez stupide maintenant. J'ai laissé un UIView vide derrière, agissant comme un conteneur pour la collectionView pour un test. J'ai simplement oublié de l'enlever, tout fonctionne bien avec un Nice clearColor maintenant ...

10
nebuto

Dans mon cas, la couleur d'arrière-plan du storyboard était définie sur Par défaut. Cela a provoqué un fond noir. Le changer en Clear Color a fonctionné.

 enter image description here

67
Kyle Robson

Essayez de régler la couleur pour effacer et la vue d'arrière-plan sur une vue vide comme ...

self.collectionView.backgroundColor = [UIColor clearColor];
self.collectionView.backgroundView = [[UIView alloc] initWithFrame:CGRectZero];
46
Fogmeister

Faites attention lorsque vous définissez UICollectionView s Couleur de fond dans le scénarimage:

La valeur initialement sélectionnée Par défaut est Noir (contre-intuitivement).
Vous devez sélectionner explicitement Effacer la couleur pour que la vue soit transparente.

Notez également que l'aperçu dans Storyboard change immédiatement lorsque cela est fait "correctement" ...

7
DaniEll

La solution la plus simple consiste à sélectionner n'importe quelle couleur dans le sélecteur de couleurs pour modifier l'arrière-plan de collectionview, puis à régler l'opacité sur 0%.

1
Dary

Je l'ai résolu en utilisant dans Swift 3:

collectionViewVideo.backgroundColor = UIColor.clear.withAlphaComponent(0)
1
Sarfaraz Khan

Fogmeister 's answer a bien fonctionné. Adapté à Swift 3, ce serait:

self.collectionView.backgroundColors = [NSColor.clear]
self.collectionView.backgroundView = NSView.init(frame: CGRect.zero)
1
Fabian Lauer

Dans Swift cela fonctionne avec moi:

self.collectionView.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.0)
0
mrfoxix

Qu'a-t-on fait pour le réparer? 

À partir de Storyboard, couleur d'arrière-plan de la vue Collection, en couleur claire

puis définissez la couleur de la vue principale sur la couleur de votre choix (je règle le blanc).

0
Logic

Pour avoir un joli fond blanc semi-transparent, utilisez:

collectionView.backgroundColor = UIColor(displayP3Red: 1.0, green: 1.0, blue: 1.0, alpha: 0.35)
0

Swift 4.0 de Fogmeister 's réponse

self.collectionView.backgroundColor = UIColor.clear
self.collectionView.backgroundView = UIView.init(frame: CGRect.zero)
0