2011-01-13 6 views
20

Inserisco tali elementi nel metodo di visualizzazione? O c'è qualcosa di analogo?NSView ha qualcosa di analogo ai metodi setNeedsLayout/layoutSubviews di UIView?

+0

possibile duplicato di [cacao: qual è il modo corretto per dire a NSWindow di rivisualizzare il suo contenuto?] (Http://stackoverflow.com/questions/4676412/cocoa-what-is-the-proper-way- to-tell-an-nswindow-to-redisplay-its-contents) –

+4

Penso che sia una domanda diversa. Uno sta chiedendo come dire alla finestra di rivisualizzare tutto da zero. L'altro sta chiedendo solo il layout. –

+0

In effetti: questa è una domanda diversa. – jonsibley

risposta

12

Analogamente a layoutSubviews è il metodo resizeSubviewsWithOldSize: di NSView. Suppongo che, analogamente a setNeedsLayout, chiamerei direttamente resizeSubviewsWithOldSize:[self frame].size.

9

Al OSX 10.7:

  • (vuoto) la layout è equivalente a layoutSubviews

V'è ora un setNeedsLayout identica.

Ignora questo metodo se la visualizzazione personalizzata deve eseguire layout personalizzati non espressivi utilizzando il sistema di layout basato su vincoli. In questo caso sei responsabile di chiamare setNeedsLayout: quando qualcosa che impatta il tuo layout personalizzato cambia.

Non è possibile invalidare alcun vincolo come parte della fase di layout, né invalidare il layout della superview o delle visualizzazioni al di fuori della gerarchia della vista. Inoltre, non è possibile richiamare un passaggio di disegno come parte del layout.

È necessario chiamare [super layout] come parte della propria implementazione.

+4

Questo è solo per il layout basato su vincoli (noto anche come 'Layout automatico ') – UncleAli

1

A volte, resizeSubviewsWithOldSize non viene chiamato. Quindi, provare a ignorare resizeWithOldSuperviewSize.

1

resizeSubviewsWithOldSize: sembra che non faccia nulla. Non viene mai chiamato per me. Forse è perché uso l'autolayout e la documentazione dice che è correlato all'autorizzazionamento.

di NSView disposizione sembra essere la stessa di layoutSubviews di UIView. Sono entrambi superabili se si vuole fare un lavoro speciale da sostituire o in aggiunta all'autorizzazion o all'autolayout.

Chiamando questo su UIView

[view setNeedsLayout]; 

sembra essere lo stesso di questo su NSView

view.needsLayout = YES; 

che pone la domanda, perché è "setNeedsLayout" anche un nome di funzione? Come, davvero, hai deciso di rimuovere il parametro da una funzione setter e mantenere il "set" nel titolo? Perché non "scheduleLayout"? Ciò eliminerebbe la necessità di domande di overflow dello stack come questo.

+0

Grazie per aver pubblicato i risultati. – mattsven

Problemi correlati