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)
[window setFrame:NSMakeRect(0.f, 0.f, 200.f, 200.f) display:YES animate:YES];
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