2012-09-15 3 views

Répondre

23

Utilisez -setFrame:display:animate: pour un maximum de contrôle:

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

Notez que les coordonnées de la fenêtre sont basculés de ce que vous pourriez être habitué. Le point d'origine d'un rectangle est à son bas à gauche dans Quartz/Cocoa sur Mac OS X. Pour assurer le point d'origine reste le même:

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 réponse de Leo a un point, ou au moins j'ai vu la même chose - le +/- devrait être inversé. –

+1

J'ai essayé ce code mais toujours ma fenêtre se déplaçant vers le bas. toute solution pour arrêter de déplacer la fenêtre. –

+0

Fonctionne parfaitement pour moi. Je voulais redimensionner par programme un contrôleur de fenêtre qui était présenté sous forme de feuille. Merci! – Supertecnoboff

2

Utilisez setFrame:display:animate:

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

Je ne sais pas ce que NSMakeFrame est. J'utilise NSMakeRect. –

9

Il est semble en fait que +/- besoin d'être inversé pour garder la fenêtre de se déplacer à l'écran:

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

Ou mieux encore: frame.origin.y + = (frame.size.height - theSizeYouWant.height); – mojuba

0

Version Swift

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