Je souhaite utiliser UICollectionView
pour afficher une liste de vignettes défilante horizontale. Toutefois, je souhaite que cette liste soit composée d'une seule ligne. Sur une autre vue, j'affiche les vignettes dans une UICollectionView
mais celle-ci défile verticalement et se trouve dans une seule colonne.
Actuellement, je modifie la taille de la vue de collection pour qu'elle ne soit assez grande que pour un seul élément, de sorte qu'elle est automatiquement enroulée et fonctionne, mais maintenant, je traite des éléments de taille variable pour que cela ne fonctionne plus.
Comment faire en sorte qu'une UICollectionView
affiche une ligne ou une colonne?
Je suppose que vous utilisez le Flow Layout
..__ intégré. Cependant, dans votre cas, vous devriez créer un UICollectionView Layout
..__ personnalisé. Créez-le sous-classe de UICollectionViewFlowLayout
et ajoutez ce code dans la méthode init
:
- (id)init {
if ((self = [super init])) {
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.minimumLineSpacing = 10000.0f;
}
return self;
}
La minimumLineSpacing
est la clé pour que vous ayez une ligne ici.
J'espère que ça aide!
J'ai constaté que le réglage de la minimumLineSpacing
rendait ma zone de défilement très grande et que le réglage de minimumInteritemSpacing=big
permettait de conserver les éléments dans une ligne ou une colonne de défilement, centrée au milieu de la collectionview
.
Il n'y a pas vraiment de raison de sous-classer si vous pouvez faire confiance au transtypage.
((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f;
Si votre collectionView est chargée à partir d'un nib, vous pouvez également jouer avec les paramètres des inspecteurs d'attributs et de taille.
Il en va de même pour la direction de défilement.
Pour Swift 3
let flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = CGSize(width: UIScreen.main.bounds.width/2-10, height: 190)
flowLayout.sectionInset = UIEdgeInsetsMake(0, 5, 0, 5)
flowLayout.scrollDirection = UICollectionViewScrollDirection.horizontal
flowLayout.minimumInteritemSpacing = 0.0
self.gCollectionView.collectionViewLayout = flowLayout
Lorsque vous initiez votre UICollectionView
, passez la UICollectionViewFlowLayout
suivante dans le paramètre init.
Remarque: Il n'est pas nécessaire de créer une sous-classe de UICollectionViewFlowLayout
.
var collectionViewFlowControl = UICollectionViewFlowLayout()
collectionViewFlowControl.scrollDirection = UICollectionViewScrollDirection.Horizontal
Pour un espacement de cellule de 0 px:
collectionViewFlowControl.minimumInteritemSpacing = 0;
collectionViewFlowControl.minimumLineSpacing = 0;
collectionView = UICollectionView(frame: CGRectMake(0, 0, self.view.frame.size.width, 120), collectionViewLayout: collectionViewFlowControl)
Je voulais une colonne alignée à gauche et les autres réponses ne m'ont pas aidé.
Voici donc ma solution très simple pour une colonne, alignée à gauche:
class GCOneColumnLeftAlignedFlowLayout: UICollectionViewFlowLayout {
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let attributes = super.layoutAttributesForElements(in: rect)
var y: CGFloat = sectionInset.top
attributes?.forEach { layoutAttribute in
layoutAttribute.frame.Origin.x = sectionInset.left
layoutAttribute.frame.Origin.y = y
y = y + layoutAttribute.frame.height + minimumLineSpacing
}
return attributes
}
}
vous devriez aussi mettre quelque chose comme
estimatedItemSize = CGSize(width: 120, height: 40)
N'oubliez pas de supprimer la ligne
minimumLineSpacing = big number
Des autres solutions.
J'espère que cela sera utile car c'est une approche complètement différente des autres réponses.
UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
[layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
layout.minimumInteritemSpacing = 0;
layout.minimumLineSpacing = 0;
blendEffectCollectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 95, 320, 60) collectionViewLayout:layout];
[blendEffectCollectionView setDataSource:self];
[blendEffectCollectionView setDelegate:self];
[blendEffectCollectionView registerClass:[BlendModeCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[blendEffectCollectionView setBackgroundColor:[UIColor clearColor]];
[bottomActivityView addSubview:blendEffectCollectionView];