web-dev-qa-db-fra.com

UICollectionVIew: Comment puis-je supprimer l'espace situé sur la première rangée de cellules

J'ai cet arrangement dans Interface Builder, toutes les propriétés sont définies sur zéro.

enter image description here

Cependant, lorsque je l'exécute à la fois sur l'appareil et sur le simulateur, il apparaît comme ceci

enter image description here

D'où vient l'espace au-dessus des cellules?

J'essaie donc de définir ces propriétés pour UICollectionViewFlowLayout dans un code comme celui-ci.

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.headerReferenceSize = CGSizeZero;
    layout.footerReferenceSize = CGSizeZero;
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
    layout.minimumInteritemSpacing = 0;
    layout.minimumLineSpacing = 0;
    layout.itemSize = CGSizeMake(103, 119);

    self.calendarView.collectionViewLayout = layout;

mais je n'ai pas de chance.

Comment puis-je me débarrasser de cet espace?… Merci.

36
SaintTail

UICollectionView est un descendant de la classe UIScrollView qui possède la propriété contentInset. La définition de -20, haut de la page, résout le problème.

[self.calendarView setContentInset:UIEdgeInsetsMake(-20, 0, 0, 0)];

Cependant, le problème provient de la propriété automaticallyAdjustsScrollViewInsets de UIViewController. Par documentation: 

La valeur par défaut est YES, ce qui permet au contrôleur de la vue de régler les incrustations de la vue en défilement en réponse aux zones d'écran utilisées par la barre d'état, la barre de navigation, la barre d'outils ou la barre d'onglets. Définissez la valeur sur NO si vous souhaitez gérer vous-même les réglages de la vue de défilement.

C'est pourquoi nous obtenons des encarts de contenu ajustés pour la barre d'état. Il est préférable de désactiver le réglage automatique plutôt que de définir manuellement une valeur qui ne correspond pas à l'image du résultat.

[self setAutomaticallyAdjustsScrollViewInsets:NO];
101
Seryozha

Une autre méthode consiste à sélectionner votre ViewController et à décocher la case Ajuster les incrustations d'affichage de défilement dans votre générateur d'interface: 

 enter image description here

C'est essentiellement la même chose que la ligne de code suivante. Mais vous devez voir immédiatement vos modifications dans le constructeur d'interface. 

automaticallyAdjustsScrollViewInsets = false
67
Yuchen Zhong

Voici la réponse dans Swift avec quelques ajustements: 

J'ai une vue de collection qui occupe une petite partie de la vue. J'ai utilisé:

self.automaticallyAdjustsScrollViewInsets = false

pour supprimer le haut espacement qui a été gâché ma mise en page. Ce morceau de code n'a pas fonctionné pour moi:

self.paperCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)

Et celui-ci non plus:

self.paperCollectionView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)

Mais c'est peut-être parce que je n'utilise pas UICollectionViewController, je n'utilise qu'un UICollectionView.

Voici une plus grande partie du code pour donner plus de contexte:  enter image description here

11
Rob Norback

Vous pouvez aussi aller avec 

[self.calendarView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
[self setAutomaticallyAdjustsScrollViewInsets:NO];

Par défaut, l'espace de défilement de l'en-tête de la vue de collection est ajouté à la vue de collection et il n'est pas nécessaire d'ajouter -20 à partir du haut, car cela peut entraîner un problème de périphérique

7
Kirtikumar A.

Swift 3:

self.automaticallyAdjustsScrollViewInsets = false

2
Urvish Modi

Cette réponse est bizarre, mais cela fonctionne si vous travaillez dans Interface Builder et que vous avez une vue Collection incorporée dans un contrôleur de vue sous le contrôle d'un contrôleur à barre d'onglets qui est le contrôleur de vue racine d'un contrôleur de navigation.

  • Ajouter une barre d'outils au contrôleur de vue contenant la vue Collection
  • Déplacez la barre d’outils dans la hiérarchie afin qu’elle se trouve au-dessus de la vue Collection.

Si la barre d'outils se situe au-dessus de la vue Collection, il n'y aura pas d'espace du haut de la cellule prototype de la vue Collection à la vue Collection. S'il n'y a pas de barre d'outils ou si la barre d'outils se trouve sous la vue Collection, il y aura un espace entre le haut de la vue Collection et la cellule de la vue Collection. Cela est vrai à la fois dans l'aperçu du Storyboard et lors de l'exécution de l'application. Le même type de chose se produit pour les vues de table.

Ceci a été récemment testé avec Xcode Version 8.3.3  Collection View Cells and Toolbar Dependency

1
Mark A. Durham

Pour ce faire, dans Interface Builder, accédez à la section Vue de défilement et modifiez le menu déroulant Encarts de contenu sur "Jamais".

 UICollectionView ScrollView ContentInset Never

0
elliott.io