2017-02-14 4 views
1

Ich versuche, eine NSCollectionView zu erstellen, wo Items an den verfügbaren Platz anpassen, anstatt eine feste Größe für die Elemente zu definieren und die NSCollectionView entsprechend anzupassen.Auto-Größe NSCollectionViewItem Bildschirm anpassen

Ich konnte mit dem NSCollectionViewFlowLayout keinen Weg finden, dies zu erreichen, da es eine feste Größe für seine Elemente benötigt. Mit dem NSCollectionViewGridLayout kam ich dem gewünschten Ergebnis sehr nahe. Ich brauche jedoch die CollectionViewItems, um ihr Seitenverhältnis (Quadrate) beizubehalten, wenn das Fenster skaliert wird, das die NSCollectionView enthält, während GridLayout die Elemente entsprechend auf ihre min und maxItemSize skaliert. Abhängig von der Fenstergröße und der Anzahl der Objekte in der Sammlung, lande ich mit Objekten, die nicht exakt quadratisch sind.

Beispiel Screenshot: distorted NSCollectionViewItems

Ich könnte wahrscheinlich umgehen, dass die maximumNumberOfColumns im Raster mit der Einstellung, abhängig von der Anzahl der Elemente in der Sammlung und die Fenstergröße, aber es ist ein wenig umständlich zu sein scheint. Gibt es einen besseren Weg, um das gewünschte Layout zu erreichen? Vielleicht mit einem benutzerdefinierten NSCollectionViewLayout?

Antwort

1

Sie müssen das folgende Protokoll in Ihrem Controller implementieren:

NSCollectionViewDelegateFlowLayout 

Es hat eine Menge von Methoden, so dass die Feinabstimmung Elemente (Größe/Position/Ränder). Vergessen Sie nicht, das Layout Ihrer Sammlungsansicht auf "flow" zu setzen (in IB).

Geben Sie für die Durchführung der folgenden Methoden:

func collectionView(collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAtIndex section: Int) -> NSEdgeInsets { 

    ... 

} 

func collectionView(collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> NSSize { 

    ... 
} 

func collectionView(collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { 
    ... 
} 
+0

Das würde bedeuten, die Größe der Zellen berechnen auf der Fenstergröße und die Anzahl der Elemente abhängig, nicht wahr? Es gibt kein 'Auto-Layout' dafür? – rooney

+0

Korrigieren. Für solche Details gibt es kein automatisches Layout. Ich wünschte, sie hätten es ein bisschen mehr CSS-flexbox gucken lassen. –

Verwandte Themen