2009-08-25 13 views
5

Mi piacerebbe avere lo stesso comportamento degli oggetti speciali come è stato fatto nell'applicazione Cose. Voglio dire Logbook e Trash elementi nella parte inferiore della barra laterale:Come mantenere l'ultimo elemento dell'albero di NSOutlineView nella parte inferiore di una barra laterale?

Logbook and Trash items are in the most bottom http://tinyurl.com/lhctza

prega di avvisare un modo per implementare la stessa funzionalità nell'albero barra laterale.

Ritengo che sia necessario utilizzare un albero speciale "spacer" insieme al metodo outlineView:heightOfRowByItem:.

Tuttavia, non riesco a trovare come calcolare l'altezza totale di tutti gli elementi visibili (compreso lo spazio tra i gruppi).

risposta

1

Ho deciso di digitalizzare la soluzione aggiungendo 8 pixel di altezza per ogni oggetto radice nello stile di gruppo. Così, il codice simile a questo:

- (CGFloat)outlineView:(NSOutlineView *)ov heightOfRowByItem:(id)item; 
{ 
    if (![item isSpacer]) return [ov rowHeight]; 

    static const CGFloat ADDITIONAL_SPACE = 8.0f; 
    NSUInteger numberOfRootGroups = 2; 
    CGFloat heightOfRows = [ov rowHeight] * ([ov rowForItem:item] + 1) 
     + ADDITIONAL_SPACE * numberOfRootGroups; 
    CGFloat heightOfSidebar = [[ov superview] frame].size.height; 
    return MAX(0.0f, heightOfSidebar - heightOfRows); 
} 

Grazie a tutti per il supporto!

3

Si potrebbe provare semplicemente ad avere due viste di profilo: una di altezza fissa, appuntata sul fondo della loro superview, e l'altra di altezza variabile, con il suo fondo immediatamente sopra la cima del primo. La vista struttura ad altezza fissa conterrebbe quegli elementi del registro e del cestino e la vista struttura ad altezza variabile conterrebbe tutti gli altri.

La parte difficile sarebbe rendere piacevole questo gioco con una vista di scorrimento, ma penso che potresti farlo. Immagino che li inseriresti entrambi in un NSView completamente ridimensionabile e che la vista del documento della vista di scorrimento.

+0

+1. Ho visto altre liste (come la voce Opzioni di accesso nel prefpane Account) replicate in questo modo. – iKenndac

+0

Tuttavia, è necessario gestire non solo gli stati di scorrimento e 2 visualizzazioni ma il livello di indentazione, i risponditori successivi, alcuni tasti di scelta rapida ecc. La domanda è ancora aperta :) – Stream

+0

Il livello di indentazione non dovrebbe cambiare se si tratta di elementi di livello superiore. Buon punto a proposito della catena di risposta, comunque. –

Problemi correlati