2016-03-30 16 views
0

Ich habe ein Szenario, dass ich X Labels (oder Schaltflächen) habe. Sie sollten in einer horizontalen Sammlungsansicht angezeigt werden. Es sollte nicht scrollbar sein. Die Sache ist, dass die Anzahl der Etiketten/Knöpfe sich ändern kann (0-5).CollectionView mit unterschiedlicher Anzahl von Elementen, Elemente sollten die Sammlungsansicht füllen

Die perfekte Sache eine StackView mit gleicher Breite für jedes Element zu verwenden, wäre aber ich nicht verwenden kann, weil es so iOS 9. (Ich brauche Kompatibilität für iOS 8.0 zu -.-)

braucht Ich erstelle eine Sammlungsansicht, deaktiviere das Scrollen und möchte eine dynamische Höhe und Breite für meine Zellen festlegen.

Ich erhalte die Höhe/Breite meiner Kollektion

heightOfLabel = testModeLoginCollectionView.frame.height 
widthOfLabel = testModeLoginCollectionView.frame.width/
        CGFloat(array5.count) 

Die Ergebnisse sind testModeLoginCollectionView.frame.width = 568,0 widthOflabel 113,6 array5 = 5 Artikel

Ich benutzte diese Methode, um Größe meine Zellen :

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

    let c = CGSizeMake(heightOfLabel!, widthOfLabel!); 
    return c 
    } 

Er soll Größe Breite der Zellen 113,6 und 33,0 Bu t es sieht so aus: enter image description here

Ich versuchte ein wenig mit Aspect Fit, Scale zu füllen usw., aber es ändert sich nicht so viel. Es ist zu groß oder zu klein. enter image description here

Hat jemand eine Idee? Ich würde auch eine andere Technologie als die Collection-Ansicht verwenden.

Wann habe ich die Werte in meinen Variablen gespeichert?

override func viewDidLoad() { 

    testModeLoginCollectionView.delegate = self 
    testModeLoginCollectionView.dataSource = self 

    heightOfLabel = testModeLoginCollectionView.frame.height 
    widthOfLabel = testModeLoginCollectionView.frame.width/CGFloat(array5.count) 
    print("testModeLoginCollectionView.frame.width \(testModeLoginCollectionView.frame.width)") 
    print("widthOfLabel \(widthOfLabel)") 

} 

Ich versuchte es in viewDidAppear, aber keinen Unterschied

+0

An welchem ​​Punkt werden Speichern Sie die Werte für heightOfLabel und widthOfLabel? – ZeMoon

Antwort

1

nach viewDidLayoutSubviews Blick rechten Rahmen. so können Sie in viewDidLayoutSubviews reloadData. , aber ich habe eine andere Lösung: Sie konnte verwenden https://github.com/forkingdog/FDStackView es ist wie uistackview gleiche api haben

+0

interessant ich schaue – kuzdu

+0

viewDidLayoutSubviews arbeitete für mich – kuzdu