J'ai cet arrangement dans Interface Builder, toutes les propriétés sont définies sur zéro.
Cependant, lorsque je l'exécute à la fois sur l'appareil et sur le simulateur, il apparaît comme ceci
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.
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];
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:
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
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:
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
Swift 3:
self.automaticallyAdjustsScrollViewInsets = false
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.
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.