Ich möchte UICollectionView
verwenden, um eine horizontale, scrollbare Liste von Miniaturansichten anzuzeigen. Ich möchte jedoch, dass es sich um eine einzelne Zeile handelt. In einer anderen Ansicht zeige ich die Miniaturbilder in einer UICollectionView
an, aber diese scrollt vertikal und ist in einer einzelnen Spalte dargestellt.
Momentan mache ich dies, indem ich die Größe der Sammlungsansicht so verändere, dass sie nur für einen Artikel groß genug ist, damit er automatisch verrottet und funktioniert. Jetzt beschäftige ich mich mit Elementen mit variabler Größe, sodass er nicht mehr funktioniert.
Wie lässt sich eine UICollectionView
-Zeile oder Spalte anzeigen?
Ich vermute, Sie verwenden den eingebauten Flow Layout
. Für Ihren Fall sollten Sie jedoch einen benutzerdefinierten UICollectionView Layout
..__ erstellen. Machen Sie ihn zur Unterklasse von UICollectionViewFlowLayout
und fügen Sie diesen Code in die init
-Methode ein:
- (id)init {
if ((self = [super init])) {
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.minimumLineSpacing = 10000.0f;
}
return self;
}
Das minimumLineSpacing
ist der Schlüssel, damit es hier eine Zeile hat.
Ich hoffe das hilft!
Ich habe festgestellt, dass das Einstellen der minimumLineSpacing
gerade meinen Bildlaufbereich wirklich groß gemacht hat, und dass das Einstellen des minimumInteritemSpacing=big
durch Beibehalten der Elemente in einer Bildlaufzeile oder -spalte erreicht wurde, zentriert in der Mitte der collectionview
.
Es gibt keinen wirklichen Grund für die Unterklasse, wenn Sie der Typumwandlung vertrauen können.
((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f;
Wenn Sie Ihre collectionView aus einer Feder geladen haben, können Sie auch mit den Parametern in den Attributen "Attribute" und "Größe" herumspielen.
Gleiches gilt für die Scrollrichtung.
Für 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
Wenn Sie Ihre UICollectionView
in init setzen, übergeben Sie die folgende UICollectionViewFlowLayout
im init-Parameter.
Hinweis: Sie müssen keine Unterklasse von UICollectionViewFlowLayout
erstellen.
var collectionViewFlowControl = UICollectionViewFlowLayout()
collectionViewFlowControl.scrollDirection = UICollectionViewScrollDirection.Horizontal
Für 0 px Zellenabstand:
collectionViewFlowControl.minimumInteritemSpacing = 0;
collectionViewFlowControl.minimumLineSpacing = 0;
collectionView = UICollectionView(frame: CGRectMake(0, 0, self.view.frame.size.width, 120), collectionViewLayout: collectionViewFlowControl)
Ich wollte eine Spalte, links ausgerichtet und die anderen Antworten haben mir nicht geholfen.
Hier ist meine sehr einfache Lösung für eine Spalte, links ausgerichtet:
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
}
}
du solltest auch sowas einstellen
estimatedItemSize = CGSize(width: 120, height: 40)
Vergessen Sie nicht, die Leitung zu entfernen
minimumLineSpacing = big number
Von den anderen Lösungen.
Ich hoffe, das ist hilfreich, weil es eine völlig andere Herangehensweise ist als die anderen Antworten.
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];