2012-09-15 25 views

Respuesta

23

Uso -setFrame:display:animate: para un control máximo:

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

Tenga en cuenta que las coordenadas de ventana se da la vuelta a lo que podría ser usado para. El punto de origen es un rectángulo en su parte inferior izquierda de cuarzo/Cacao en OS X. Para asegurar el punto de origen sigue siendo el mismo:

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 respuesta de Leo tiene un punto, o al menos yo vi lo mismo: el +/- debe invertirse. –

+1

tengo probar este código pero aún mi ventana se mueve hacia abajo. cualquier solución para detener la ventana en movimiento. –

+0

me funciona a la perfección. Quería cambiar el tamaño programáticamente de un controlador de ventana que se presentaba como una vista de hoja. ¡Gracias! – Supertecnoboff

2

Uso setFrame:display:animate:

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

no sé lo que es NSMakeFrame. Yo uso NSMakeRect. –

9

cierto se parece que +/- necesidad de invertir para mantener la ventana se mueva en la pantalla:

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 mejor aún: frame.origin.y + = (frame.size.height - theSizeYouWant.height); – mojuba

0

versión Swift

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