2012-09-15 17 views

risposta

23

Usa -setFrame:display:animate: per il massimo controllo:

NSRect frame = [window frame]; 
frame.size = theSizeYouWant; 
[window setFrame: frame display: YES animate: whetherYouWantAnimation]; 

Si noti che le coordinate della finestra sono capovolte da quello che potrebbe essere utilizzato per. Il punto di origine di un rettangolo è al suo basso a sinistra in quarzo/cacao su OS X. Per assicurare il punto di origine rimane lo stesso:

NSRect frame = [window frame]; 
frame.origin.y -= frame.size.height; // remove the old height 
frame.origin.y += theSizeYouWant.height; // add the new height 
frame.size = theSizeYouWant; 
// continue as before 
+1

@ La risposta di Leo ha un punto, o almeno ho visto la stessa cosa: il +/- dovrebbe essere invertito. –

+1

ho provato questo codice ma ancora la mia finestra si sposta verso il basso. qualsiasi soluzione per smettere di spostare la finestra. –

+0

Funziona perfettamente per me. Volevo ridimensionare a livello di programmazione un controller di finestra che veniva presentato come una vista foglio. Grazie! – Supertecnoboff

2

Usa setFrame:display:animate:

[window setFrame:NSMakeRect(0.f, 0.f, 200.f, 200.f) display:YES animate:YES]; 
+3

non so che cosa è NSMakeFrame. Io uso NSMakeRect. –

9

è in realtà sembra che +/- bisogno di essere invertita per mantenere la finestra dal movimento sullo schermo:

NSRect frame = [window frame]; 
frame.origin.y += frame.size.height; // origin.y is top Y coordinate now 
frame.origin.y -= theSizeYouWant.height; // new Y coordinate for the origin 
frame.size = theSizeYouWant; 
+0

O meglio ancora: frame.origin.y + = (frame.size.height - theSizeYouWant.height); – mojuba

0

Swift versione

var frame = self.view.window?.frame 
frame?.size = NSSize(width: 400, height:200) 
self.view.window?.setFrame(frame!, display: true) 
Problemi correlati