【发布时间】:2018-10-18 03:39:44
【问题描述】:
我正在开发一个应用程序,我不希望用户能够调整大小但能够在 2 种大小之间切换,例如 MacOS Calc 应用程序。
我设法使用此代码window.styleMask.remove(.resizable) 使其无法调整大小,在此处找到Non-resizable window swift
是否有模拟 Calc 应用程序行为的选项,如果可以,如何?
【问题讨论】:
我正在开发一个应用程序,我不希望用户能够调整大小但能够在 2 种大小之间切换,例如 MacOS Calc 应用程序。
我设法使用此代码window.styleMask.remove(.resizable) 使其无法调整大小,在此处找到Non-resizable window swift
是否有模拟 Calc 应用程序行为的选项,如果可以,如何?
【问题讨论】:
Calculator.app 似乎将其窗口保持为可调整大小,这可以从它的边缘显示调整大小的光标这一事实来证明。但是,它可能会限制窗口的大小(取决于计算器模式)。应用可以通过多种方式对其进行控制。
Calculator 似乎在其窗口委托中实现windowWillResize(_:to:) 以始终根据模式返回固定大小,而忽略请求的大小。这方面的证据是调整大小的光标表明调整大小是可能的(双头箭头)。使用这种机制,系统无法提前确定调整大小是否会起作用,因为委托人每次被询问时都会给出不同的答案。
另一种技术是使用自动布局约束,以高于NSLayoutPriorityDragThatCanResizeWindow (510) 的优先级指定窗口大小。
最后,您可以将窗口的contentMinSize 和contentMaxSize 属性设置为相同的大小。 (您可以使用minSize 和maxSize,但content...Size 更容易使用。)
要切换大小,您可以将缩放按钮的操作选择器更改为您自己的方法,覆盖zoom(_:) 方法,或在委托中实现windowWillUseStandardFrame(_:defaultFrame:)。最后一个可能是最好的。它应该返回适合非当前模式的帧。
【讨论】: