如何使MacOS窗口不可调整大小,而是切换大小?

时间:2018-10-17 17:30:18

标签: swift macos

我正在开发一个我不希望用户能够调整大小但可以在两种大小之间切换的应用程序,例如MacOS Calc应用程序。

我使用Non-resizable window swift处的这段代码window.styleMask.remove(.resizable)使其无法调整大小。

问题如下,该代码禁用了标题栏中的调整大小按钮。 Photo of titlebar

是否可以模仿Calc应用程序的行为?如果可以,怎么办?

1 个答案:

答案 0 :(得分:4)

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

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

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

最后,您可以将窗口的contentMinSizecontentMaxSize属性设置为相同的大小。 (您可以使用minSizemaxSize,但content...Size则更易于使用。)

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