2017-02-08 14 views
0

Ich möchte mein eigenes Spaltengrößenänderungsschema in einem NSTableView implementieren. Ich habe das größtenteils funktioniert, aber ich kämpfe mit dem dynamischen Aussehen der vertikalen Bildlaufleiste.Benutzerdefiniertes columnAutoresizingStyle mit NSTableView

Stellen Sie sich vor, ich möchte eine Tabelle mit zwei Spalten haben, in der die erste immer 1/3 belegt und die andere die verbleibenden 2/3 des sichtbaren Raums.

Ich habe versucht, dies zu erreichen, indem die tile Methode in einer Unterklasse von NSTableView Umsetzung wie folgt:

- (void)tile 
{ 
    NSClipView *container = (NSClipView*) self.superview; 

    NSSize spacing = self.intercellSpacing; 
    CGFloat avail = container.frame.size.width; 
    CGFloat cw0 = (int) (avail/3); 
    CGFloat cw1 = avail - cw0; 
    self.tableColumns[0].width = cw0 - spacing.width; 
    self.tableColumns[1].width = cw1 - spacing.width; 

    [super tile]; 
} 

Ich glaube, ich habe [super tile] aufzurufen die Bildlaufleisten zu haben, wie notwendig hinzugefügt bekommen.

Das Problem ist jedoch, dass, wenn ich die Größe des Fensters (und damit auch die Größe der TableView), die horizontale Bildlaufleiste ist manchmal Teil der Clip-Ansicht und manchmal nicht, was zu Flackern führt.

Hier sind Beispiele, die ich erhalte, wenn die Größe des Fensters:

gutes Ergebnis:

good resize example

Bad Ergebnis (beachten Sie die Tatsache, dass es eine horizontale Bildlaufleiste):

bad resize example

Während ich die Größe des Fensters ändern, fügen Sie in der Tabellenansicht immer wieder hinzu horizontale Bildlaufleiste, dadurch flackernd. Das möchte ich vermeiden.

Ich frage mich, wie die ursprüngliche tile Funktion dies behandelt. Wie würde ich es aktivieren, damit ich nicht das Flackern bekomme, aber die Bildlaufleisten wie benötigt erscheinen?

+0

Überschreiben '- [NSTableView] sizeLastColumnToFit'? – Willeke

Antwort

0

Stellt sich die Lösung aus war ziemlich einfach:

ich erwähnt habe, sollte, dass ich die Tableview des columnAutoresizingStyle-NSTableViewNoColumnAutoresizing gesetzt hatte - denn ich wollte meine eigene Größe neu bestimmen verwalten, also ging ich davon muss ich AppKit die Verarbeitung drehen würde aus.

Aber nein - ich sollte es auf NSTableViewLastColumnOnlyAutoresizingStyle setzen, und dann funktioniert es wie beabsichtigt.

Ich bewegte auch [super tile]; an den Anfang der Funktion.