objective-c macos window size nswindow

objective c - Establecer tamaño de ventana de NS programáticamente



objective-c macos (6)

¿Cómo puedo configurar el tamaño de la ventana mediante programación? Tengo una ventana en IB y quiero establecer su tamaño en mi código para hacerla más grande.


En realidad, parece que es necesario invertir +/- para evitar que 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;


Mis dos centavos para swift 4.x 7 OSX:

a) no llame al viewDidLoad b) vaya a la cola principal ... b) espere un momento ... así que por ejemplo use:

private final func setSize(){ if let w = self.view.window{ var frame = w.frame frame.size = NSSize(width: 400, height: 800) w.setFrame(frame, display: true, animate: true) } }


Por lo general, quiero cambiar el tamaño de la ventana según el tamaño del contenido (sin incluir la barra de título):

var rect = window.contentRect(forFrameRect: window.frame) rect.size = myKnownContentSize let frame = window.frameRect(forContentRect: rect) window.setFrame(frame, display: true, animate: true)



Versión rápida

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


Use -setFrame:display:animate: para obtener el máximo control:

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

Tenga en cuenta que las coordenadas de la ventana se invierten de lo que podría estar acostumbrado. El punto de origen de un rectángulo está en su parte inferior izquierda en Cuarzo / Cacao en OS X. Para garantizar que 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