2013-10-29 20 views

回答

9

您可以設置窗口的位置使用到右上角:

- (void)setWindowPosition 
{ 
    NSPoint pos; 
    pos.x = [[NSScreen mainScreen] visibleFrame].origin.x + [[NSScreen mainScreen] visibleFrame].size.width - [_window frame].size.width ; 
    pos.y = [[NSScreen mainScreen] visibleFrame].origin.y + [[NSScreen mainScreen] visibleFrame].size.height - [_window frame].size.height ; 
    [_window setFrameOrigin : pos]; 
} 

調用此方法在您的applicationDidFinishLaunching:,並且還註冊windowDidResizeNotification來處理調整大小事件爲:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    [self setWindowPosition]; //set window pos 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:NSWindowDidResizeNotification object:nil]; //register resize notification 

} 

現在在您的通知處理程序方法中,再次更新窗口位置。

- (void)handleNotification: (id) sender 
{ 
    [self setWindowPosition]; 
} 
1

使用[NSScreen visibleFrame]

(未經測試)

// Assumes self is the NSWindow subclass 
NSRect sf = [[NSScreen mainScreen] visibleFrame]; 
NSRect wf = self.frame; 
self.frame = NSMakeRect(NSWidth(sf) - NSWidth(wf), NSHeight(sf) - NSHeight(wf), 
         wf.size.width, wf.size.height); 
+0

我使用的是分辨率爲2.560x1.440的iMac,但visibleFrame的高度僅爲1.324。看起來,碼頭和菜單欄的高度是從這個框架中減去的。由於我的起源是屏幕的左下角,因此如果在計算中缺少碼頭的高度。我該如何處理? – dhrm

+0

@DennisMadsen這不正是你想要的嗎?正因爲這個原因,我建議'visibleFrame'而不是'frame'。無論如何,如果你不想考慮菜單,那麼使用'frame'而不是'visibleFrame'。 – trojanfoe

+0

非常好,菜單的高度已被減去,但碼頭也被扣除的事實不是很有幫助,因爲我的窗口框架來自屏幕的左下角 - 因此菜單欄下方的垂直位置將爲* visibleFrame.size.height + heightOfDock *。 – dhrm