2013-03-25 10 views
5

Ho una semplice verticale NSSplitView e non mantengo le sue dimensioni quando ridimensiono le finestre, ma voglio consentire manualmente il ridimensionamento dello NSSplitView durante il trascinamento della barra verticale che divide le due viste.NSSplitView: come non ridimensionare con la finestra ma solo in modo "manuale"?

MODIFICA. Questo è il codice che ho aggiunto e per qualche motivo tutto va storto: il riquadro di sinistra (sourceView) mantiene le stesse dimensioni durante il ridimensionamento della finestra ma il riquadro di destra con vincoli di layout automatico corretti (funziona bene senza implementare il metodo seguente) . NSSrollView è il riquadro sinistro che non voglio rimanere nella stessa posizione e l'altra vista potrebbe ridimensionare con la finestra.

- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview 
{ 
    if ([subview class] == [NSScrollView class]) 
     return NO; 

    return YES; 

} 

Qualcuno sa una soluzione veloce per farlo? Grazie!

+0

hai provato l'attuazione dei metodi NSSplitView delegati? – nkongara

+0

Sì, vedere i commenti nella risposta di seguito. Grazie! – Luca

risposta

0

È necessario implementare lo NSSplitViewDelegate. In particolare, è necessario assicurarsi di restituire NO per -splitView:shouldAdjustSizeOfSubview:, che impedirà il ridimensionamento automatico.

Poiché si dispone di almeno 2 subviews in ciascuna delle immagini divise, è necessario determinare quale non si desidera spostare, quindi restituire NO solo per esso e YES per la vista che si desidera modificare. Ad esempio, se si dispone di un elenco di origini e si desidera che rimanga invariato tranne che in una manipolazione manuale, restituire NO per l'elenco di origini e YES per l'altro lato.

+0

Questo è esattamente quello che ho fatto, ma per qualche motivo non funziona: il riquadro sinistro rimane della stessa dimensione e questo è ok ma per qualche motivo l'altro pannello ha uno strano comportamento: a volte il suo ridimensionamento è corretto in relazione all'autolayout vincoli che ho impostato prima, ma se lo ridimensiono di nuovo qualcosa va storto e i vincoli non sono soddisfatti. – Luca

+0

È possibile modificare la domanda per descrivere i vincoli del layout automatico? Questo è importante per rispondere pienamente alla tua domanda. – gaige

+0

Cerco di farlo ma non è così semplice perché ho una complessa gerarchia di visualizzazione. La cosa strana è anche che il mio pannello di destra si ridimensiona correttamente quando viene cambiata la dimensione della finestra, ma quando implemento il metodo tutto va storto. Per ora inserisco l'implementazione di '- (BOOL) splitView: (NSSplitView *) splitView dovrebbeAdjustSizeOfSubview: (NSView *) subview ' metodo e più tardi oggi cerco di pubblicare il codice di layout completo – Luca

6

In Xcode 4.6, la vista personalizzata sinistra della vista divisa verticale non è NSScrollView.

@synthesize leftView; 

- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview { 
    if (subview == leftView) return NO; 
    else return YES; 
} 
1

provare a impostare il comportamento del punto di vista di voce split Sidebar

+0

La migliore risposta finora –