Kann NSCollectionView die Breite der Unteransichten automatisch autorisieren, um eine Spalte anzuzeigen

8

Ich habe eine NSCollectionView , die eine Sammlung von CustomViews enthält. Anfangs wurden die Unteransichten wie ein Gitter in Spalten und Zeilen gekachelt. Ich habe dann die Eigenschaft Columns in IB auf 1 gesetzt, so dass sie nun nacheinander in Zeilen angezeigt wird. Obwohl mein CustomView 400 Pixel breit ist, ist es auf Autoresize gesetzt, NSCollectionView ist 400 Pixel breit und es ist auf 1 Spalte gesetzt, die Subviews werden etwa 80 Pixel breit gezeichnet.

Ich weiß, dass ich das umgehen kann, indem ich anrufe:

%Vor%

Aber wenn ich diesen Code in die awakeFromNib -Methode meines WindowController setze, wird beim Start des Programms nur die richtige Breite eingestellt. Wenn ich die Größe des Fensters ändere (und die NSCollectionView Autoresizes, wie ich es spezifiziert habe), bleiben die CustomViews auf der ursprünglich eingestellten Breite.

Ich bin froh, wenn ich die Größe der Unteransichten anpassen kann, wenn es sein muss, aber ich bin ziemlich neu in Cocoa und finde keine Artikel, die erklären, wie man so etwas macht. Kann mir jemand in die richtige Richtung zeigen?

Anthony

    
littlecharva 21.01.2010, 08:12
quelle

7 Antworten

-2

Matt Gallaghers wundervoller Blog Cocoa with Love ist über , um das Problem anzugehen. In dieser Woche teilte er die Bindungsdetails einer einspaltigen Ansicht wie die fragliche:

Ссылка

Nächster Eintrag, er verspricht, den Rest der Implementierung zu teilen, die Ihnen geben sollte, was Sie suchen.

(Ich sollte beachten, dass er NSView direkt subklassifiziert und viele der NSCollectionView-Funktionen neu implementiert. Dies scheint jedoch üblich zu sein; nicht viele Leute mögen es, NSCollectionView zu unterklassifizieren.)

Bearbeiten: Scheint er hat sein Versprechen gebrochen ... wir haben diesen Post nie erhalten. Siehe unten Tofutims Antwort.

    
andyvn22 11.03.2010, 17:28
quelle
9

Die richtige Antwort ist, die maxItemSize auf 0,0 ( NSZeroSize ) zu setzen. Andernfalls wird es berechnet.

%Vor%

Dies kann in awakeFromNib eingestellt werden.

    
tofutim 27.02.2014 16:19
quelle
3

Ich weiß, das ist eine sehr späte Antwort, aber ich habe das gleiche Problem und hoffe, dass meine Lösung jemandem helfen wird. Die Lösung besteht darin, auf die Grenzen der umschließenden Bildlaufansicht und nicht auf die Sammlungsansicht selbst zuzugreifen. Um es zu lösen, müssen Sie die erste Zeile durch ersetzen:

%Vor%     
Nikita 08.05.2013 16:20
quelle
2

Ich konnte das mit einem Standardlayout nicht schaffen - aber es ist ziemlich einfach, ein benutzerdefiniertes Layout zu implementieren:

%Vor%

Dann brauchst du nur

%Vor%     
Confused Vorlon 23.01.2017 18:31
quelle
1

noch ein später - Ich habe gerade einen NSTableView verwendet und einen NSView mit der Methode delegate bereitgestellt.

Die Autoresierung ist kostenlos, eine Spalte ist einfach und sie rendert massiv schneller.

    
Confused Vorlon 20.10.2014 15:30
quelle
0

Nehmen wir an, Sie möchten Ihr CollectionViewItem mit einer Größe von 200x180px, dann sollten Sie folgendes einstellen:

%Vor%

Deine Max-Size sollte groß genug sein, um gut auszusehen und genug Platz für das Stretching zu geben, damit es der collectionView-Width entspricht.

Wenn Sie eine feste Anzahl von Spalten haben, können Sie wahrscheinlich (0,0) verwenden, aber wenn Sie eine dynamische Anzahl von Zeilen und Spalten haben möchten, wie ich wollte .. sollten Sie eine feste Mindestgröße und eine größere max .size.

    
Rikco 13.12.2014 00:24
quelle
0

Sie können zwar eine Sammlungsansicht aufrufen, um sich so zu verhalten, wie Sie möchten, aber ich denke, Sie haben ein Designproblem

Sie sollten NSTableView verwenden und die Spalten auf 1 und ihre Größe auf alles außer "None" setzen. NSTableView ist für tabellarische Daten gedacht, und es kann Zellen recyceln, was eine große Leistungssteigerung für eine große Anzahl von Elementen bringt. NSCollectionView ist eher ein lineares Layout, das Elemente in einem Raster mit vertikalem Scrollen anordnet. Dies ist nützlich, wenn sich die Spaltennummer dynamisch ändern kann, damit mehr Elemente auf dem Bildschirm angezeigt werden können, normalerweise abhängig von der Geräteausrichtung und der Bildschirmgröße.

    
Radu Simionescu 27.02.2015 14:45
quelle