UICollectionView ajoute la marge supérieure

Je veux mettre un contrôle UICollectionView qui montre les pouces horizontalement (une seule ligne de pouce). Pour une raison quelconque, UICollectionView repousse les pouces de 44 pixels, de sorte que la hauteur “0” est en fait “44”. Je suppose que cela pourrait append cet espace pour tenir compte de la hauteur de la barre de navigation (je suppose). Étant donné que mon UICollectionView est seulement sur une partie de l’écran, je ne veux pas cette marge. Y a-t-il un moyen de l’enlever?

Le problème peut être dans les encarts de contenu de la vue de collection. Essayez d’append self.automaticallyAdjustsScrollViewInsets = NO; dans la méthode viewDidLoad du contrôleur de viewDidLoad .

Vous pouvez également définir ceci dans le storyboard.

Assurez-vous d’avoir sélectionné ViewController, puis décochez “Ajuster les encarts de défilement”.

entrer la description de l'image ici

Je n’ai pas testé ce que cette méthode IB / Storyboard fait sur iOS6. Avec la méthode de code, vous devez vérifier que le VC répond à la méthode:

 if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) { self.automaticallyAdjustsScrollViewInsets = NO; } 

J’ai trouvé que l’ajout:

 self.edgesForExtendedLayout = UIRectEdgeNone; 

Dans le contrôleur de vue, je chargeais UICollectionView dans le problème résolu car je ne pouvais pas obtenir la réponse acceptée.

La question à laquelle j’ai trouvé cette réponse peut être trouvée ici et fournit une explication extrêmement détaillée et intéressante de la différence entre les encarts de vue défilants ajustés automatiquement, les mises en page étendues et les arêtes pour les mises en page étendues.

Vaut bien une lecture

Vous pouvez peut-être essayer de forcer cette valeur à 0 en utilisant la disposition de stream de delegates de la vue de collection:

 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(PADDING_TOP, PADDING_LEFT, PADDING_BOTTOM, PADDING_RIGHT); } 

Modifiez la valeur de votre remplissage.

Swift 3:

Tout d’abord, vous voulez définir le paramètre viewControllers automaticallyAdjustsScrollViewInsets sur false:

 self.automaticallyAdjustsScrollViewInsets = false 

Ensuite, vous devriez pouvoir ajuster les encarts en conséquence:

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { //top, left, bottom, right return UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0) } 

Semblable à @Sviatoslav, vous pouvez essayer ce qui suit:

 - (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; yourCollectionView.contentOffset = CGPointMake(0, 0); }