gpt4 book ai didi

macos - 仅增加窗口高度直到到达 Dock

转载 作者:行者123 更新时间:2023-12-03 17:02:17 37 4
gpt4 key购买 nike

我正在增加 NSWindow 的高度,但如果窗口位于屏幕下方太远,则窗口的高度会增加并延伸到 Dock 下方。我想防止这种情况发生。

当我研究这个时,我偶然发现了 this question这说明了相反的问题 - 他们说默认情况下它不会延伸到 Dock 下方,而他们希望它如此。也许这在 OS X Yosemite 中已经改变了。无论如何,我想获得这两种行为之一:

当窗口要在 Dock 下方延伸高度时,

  1. 调整大小应停止并导致窗口与 Dock 齐平,因此窗口高度低于所需高度,或者
  2. 应该继续调整大小,但从窗口顶部而不是底部调整大小,因此它不会进入 Dock 下方,并且仍然是预期大小

这是触发窗口大小调整的方式:

[self.window setFrame:windowFrame display:YES animate:YES];

这发生在AppDelegate中,并且我没有覆盖constrainFrameRect: toScreen:

另请注意,如果将 Dock 放置在侧面并且窗口超出可用屏幕空间,也会发生这种情况。

最佳答案

屏幕上未被菜单栏或 Dock 占用的区域由 NSScreenvisibleFrame 属性给出。

您也许应该覆盖-constrainFrameRect:toScreen:。如果没有,您需要在调用 -setFrame:... 之前调整 windowFrame。在后一种情况下,您可以从窗口的 screen 属性获取 NSScreen (假设您分配的框架不会将其移动到不同的屏幕)。

您可以使用这样的逻辑:

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);
}

如果您确实覆盖了-constrainFrameRect:toScreen:,那么您应该调用super。您可以在进行调整后执行此操作并让它进一步受到限制,也可以先调用它,然后对其返回的内容进行调整。

关于macos - 仅增加窗口高度直到到达 Dock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501948/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com