2
我需要將我的NSWindow放置在屏幕的右上方,就在菜單欄的下方(如通知)。這樣做的最佳方法是什麼?可可窗口 - 如何在右上方位置
我需要將我的NSWindow放置在屏幕的右上方,就在菜單欄的下方(如通知)。這樣做的最佳方法是什麼?可可窗口 - 如何在右上方位置
您可以設置窗口的位置使用到右上角:
- (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];
}
(未經測試)
// 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);
我使用的是分辨率爲2.560x1.440的iMac,但visibleFrame的高度僅爲1.324。看起來,碼頭和菜單欄的高度是從這個框架中減去的。由於我的起源是屏幕的左下角,因此如果在計算中缺少碼頭的高度。我該如何處理? – dhrm
@DennisMadsen這不正是你想要的嗎?正因爲這個原因,我建議'visibleFrame'而不是'frame'。無論如何,如果你不想考慮菜單,那麼使用'frame'而不是'visibleFrame'。 – trojanfoe
非常好,菜單的高度已被減去,但碼頭也被扣除的事實不是很有幫助,因爲我的窗口框架來自屏幕的左下角 - 因此菜單欄下方的垂直位置將爲* visibleFrame.size.height + heightOfDock *。 – dhrm