2012-09-15 8 views

Antwort

23

Verwenden -setFrame:display:animate: für maximale Kontrolle:

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

Beachten Sie, dass Fensterkoordinaten umgedreht werden von dem, was Sie vielleicht verwendet werden. Der Ursprungspunkt eines Rechtecks ​​ist an seiner Unterseite auf OS X. in Quarz/Cocoa links den Ursprungspunkt Damit bleibt das gleiche:

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

@ Leo Antwort hat einen Punkt, oder zumindest sah ich das gleiche - die +/- sollte umgekehrt werden. –

+1

Ich habe diesen Code versucht, aber immer noch mein Fenster nach unten bewegen. jede Lösung, um das Bewegen des Fensters zu stoppen. –

+0

Funktioniert perfekt für mich. Ich wollte programmgesteuert die Größe eines Fenstercontrollers ändern, der als Blattansicht angezeigt wurde. Vielen Dank! – Supertecnoboff

2

Verwenden setFrame:display:animate:

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

Sie wissen nicht, was NSMakeFrame ist. Ich benutze NSMakeRect. –

9

Es scheint tatsächlich, dass +/- Bedarf umgekehrt werden Fenster zu halten von auf dem Bildschirm zu bewegen:

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

Oder noch besser: frame.origin.y + = (frame.size.height - theSizeYouWant.height); – mojuba

0

Swift Version

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