首页 > 解决方案 > 如何使 MacOS 窗口不可调整大小而是切换大小?

问题描述

我正在开发一个应用程序,我不希望用户能够调整大小但能够在 MacOS Calc 应用程序等 2 种大小之间切换。

window.styleMask.remove(.resizable)我设法使用此处找到的此代码使其无法调整大小Non-resizable window swift

问题如下,代码禁用了标题栏中的调整大小按钮。 标题栏照片

是否有模拟 Calc 应用程序行为的选项,如果可以,如何?

标签: swiftmacos

解决方案


Calculator.app 似乎将其窗口保持为可调整大小,这可以从它在其边缘显示调整大小的光标这一事实得到证明。但是,它可能会限制窗口的大小(取决于计算器模式)。应用程序可以通过多种方式控制它。

Calculator 似乎windowWillResize(_:to:)在其窗口委托中实现始终根据模式返回固定大小,而忽略请求的大小。这方面的证据是调整大小的光标表明调整大小是可能的(双头箭头)。使用这种机制,系统无法提前确定调整大小是否会起作用,因为委托人每次被询问时都会给出不同的答案。

另一种技术是使用自动布局约束,该约束规定优先级高于NSLayoutPriorityDragThatCanResizeWindow(510) 的窗口大小。

最后,您可以将窗口的contentMinSizecontentMaxSize属性设置为相同的大小。(您可以使用minSizeand maxSize,但content...Size那些更容易使用。)

要切换大小,您可以将缩放按钮的操作选择器更改为您自己的方法、覆盖zoom(_:)方法或windowWillUseStandardFrame(_:defaultFrame:)在委托中实现。最后一个可能是最好的。它应该返回适​​合非当前模式的帧。


推荐阅读