我正在增加NSWindow
的高度,但如果窗口位于屏幕下方太远,则窗口的高度会增加并延伸到Dock下方。我想防止这种情况发生。
当我研究这个时,我偶然发现this question指出了相反的问题 - 他们默认说它不会延伸到Dock下面并且他们想要它。也许在OS X Yosemite中已经发生了变化。无论如何,我想获得这两种行为中的任何一种:
当窗口将在Dock下方延伸时,
这是触发窗口大小调整的方式:
[self.window setFrame:windowFrame display:YES animate:YES];
这发生在AppDelegate
,我没有覆盖constrainFrameRect: toScreen:
。
另请注意,如果Dock位于侧面且窗口超出可用屏幕空间,也会出现这种情况。
答案 0 :(得分:2)
未被菜单栏或Dock占用的屏幕区域由visibleFrame
的{{1}}属性提供。
你可能应该覆盖NSScreen
。如果没有,则在调用-constrainFrameRect:toScreen:
之前调整windowFrame
。在后一种情况下,您可以从窗口的-setFrame:...
属性中获取NSScreen
(假设您指定的帧未将其移动到其他屏幕)。
你可以使用这样的逻辑:
screen
如果你覆盖if (NSHeight(windowFrame) > NSHeight(screen.visibleFrame))
{
windowFrame.origin.y = NSMinY(screen.visibleFrame);
windowFrame.size.height = NSHeight(screen.visibleFrame);
}
else if (NSMinY(windowFrame) < NSMinY(screen.visibleFrame))
{
windowFrame.origin.y = NSMinY(screen.visibleFrame);
}
if (NSWidth(windowFrame) > NSWidth(screen.visibleFrame))
{
windowFrame.origin.x = NSMinX(screen.visibleFrame);
windowFrame.size.width = NSWidth(screen.visibleFrame);
}
else if (NSMinX(windowFrame) < NSMinX(screen.visibleFrame))
{
windowFrame.origin.x = NSMinX(screen.visibleFrame);
}
else if (NSMaxX(windowFrame) > NSMaxX(screen.visibleFrame))
{
windowFrame.origin.x = NSWidth(screen.visibleFrame) - NSWidth(windowFrame);
}
,那么你应该打电话给super。您可以在进行调整后进行调整并进一步限制,或先调用它,然后对其返回的内容进行调整。