webentwicklung-frage-antwort-db.com.de

UICollectionView: Eine Zeile oder Spalte

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?

31
William T.

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!

26
Nikola Kirev

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.

12
sidekickr

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.

9
atreat

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
2
Azhar

Wenn Sie Ihre UICollectionViewin 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)
2
Ilker Baltaci

Dies funktionierte für mich, um eine einzelne Reihe von Zellen zu erhalten, unabhängig von der Höhe des CollectionView. Setzen Sie den Mindestabstand für Zellen auf 1000

Storyboard UICollectionView

1
Jiebe

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.

0
Gerd Castan
 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];
0
ajjjjjjjj