2016-06-25 8 views
16

Ich versuche, eine CollectionView zu implementieren. Wenn ich Autolayout verwende, ändern meine Zellen nicht die Größe, sondern ihre Ausrichtung.Wie setze ich UICollectionViewCell Breite und Höhe programmgesteuert

Jetzt möchte ich lieber ihre Größen z.

//var size = CGSize(width: self.view.frame.width/10, height: self.view.frame.width/10) 

Ich habe versucht, in meiner CellForItemAtIndexPath

collectionCell.size = size 

Einstellung es allerdings nicht funktionierte.

Gibt es einen Weg, dies zu erreichen?

bearbeiten:

Es scheint, dass die Antworten nur meine Collection Breite und Höhe selbst ändern. Ist ein Konflikt in Constraints möglich? Irgendwelche Ideen dazu?

Antwort

31

Verwendung dieser Methode benutzerdefinierte Zellenhöhe einstellen Breite

Objective-c

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame))); 
} 

Swift

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: screenWidth, height: screenWidth); 
} 
+0

Ich bin auf der Suche einzustellen. Ich bin mir nicht sicher, wie ich das umwandeln soll. – JVS

+0

check this one jetzt – PinkeshGjr

+0

irgendwie ändert es nicht meine Zellen, aber mehr wie meine CollectionView – JVS

6

Hier ist, was Sie tun können, haben dif schiedliche Breite und Höhe für Zelle in Bezug auf das iPhone Größe:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    var width = (self.view.frame.size.width - 12 * 3)/3 //some width 
    var height = width * 1.5 //ratio 
    return CGSize(width: width, height: height); 
} 

Und vielleicht sollten Sie auch Ihre Autolayout Einschränkungen Zelle deaktivieren für diese Antwort zu arbeiten.

1

unten versuchen Methode

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: 100.0, height: 100.0) 
} 
3

Die Auflistungsansicht hat ein Layout Objekt. In Ihrem Fall ist es wahrscheinlich ein Fließschema (UICollectionViewFlowLayout). Legen Sie die Eigenschaft itemSize des Flow-Layouts fest.

+0

Versucht dies. gibt mir das gleiche Problem wie zuvor. irgendwie ändert meine CollectionView die Größe und nicht meine Zellen. – JVS

+2

Nun, es hängt alles davon ab, wenn Sie es tun. Sie haben Ihren echten Code nicht angezeigt. Wer weiß also, was Sie tun? Ich versichere dir, dass es funktioniert. – matt

15

Endlich Antwort bekommen. Sie sollten UICollectionViewDelegateFlowLayout
erweitern Dies sollte Arbeit mit Antworten oben sein.

+0

Können Sie ein Beispiel schreiben? –

1

Versuchen unter Methode

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: 100.0, height: 100.0) 
} 
31

Stellen Sie sicher, das Protokoll UICollectionViewDelegateFlowLayout in Ihrer class Erklärung

class MyCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout 
{ 
    //MARK: - UICollectionViewDelegateFlowLayout 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    { 
     return CGSize(width: 100.0, height: 100.0) 
    } 
} 
+0

Vergessen Sie nicht, Flow-Layout und nicht benutzerdefinierte verwenden. Dann ist deins das einzige, was für mich funktioniert hat. Vielen Dank! – Sean

-2

Dies ist meine Version, finden Sie Ihr geeignetes Verhältnis zu erhalten, die Zellengröße wie pro Ihre Anforderung hinzufügen .

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
return CGSizeMake(CGRectGetWidth(collectionView.frame)/4, CGRectGetHeight(collectionView.frame)/4); 
} 
0

Ein anderer Weg ist, den Wert direkt im Fluss Layout für Swift Code

let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout 
    layout.itemSize = CGSize(width: size, height: size) 
Verwandte Themen