swift - 如何使 MacOS 窗口不可调整大小而是切换大小?
问题描述
我正在开发一个应用程序,我不希望用户能够调整大小但能够在 MacOS Calc 应用程序等 2 种大小之间切换。
window.styleMask.remove(.resizable)
我设法使用此处找到的此代码使其无法调整大小Non-resizable window swift
是否有模拟 Calc 应用程序行为的选项,如果可以,如何?
解决方案
Calculator.app 似乎将其窗口保持为可调整大小,这可以从它在其边缘显示调整大小的光标这一事实得到证明。但是,它可能会限制窗口的大小(取决于计算器模式)。应用程序可以通过多种方式控制它。
Calculator 似乎windowWillResize(_:to:)
在其窗口委托中实现始终根据模式返回固定大小,而忽略请求的大小。这方面的证据是调整大小的光标表明调整大小是可能的(双头箭头)。使用这种机制,系统无法提前确定调整大小是否会起作用,因为委托人每次被询问时都会给出不同的答案。
另一种技术是使用自动布局约束,该约束规定优先级高于NSLayoutPriorityDragThatCanResizeWindow
(510) 的窗口大小。
最后,您可以将窗口的contentMinSize
和contentMaxSize
属性设置为相同的大小。(您可以使用minSize
and maxSize
,但content...Size
那些更容易使用。)
要切换大小,您可以将缩放按钮的操作选择器更改为您自己的方法、覆盖zoom(_:)
方法或windowWillUseStandardFrame(_:defaultFrame:)
在委托中实现。最后一个可能是最好的。它应该返回适合非当前模式的帧。
推荐阅读
- ruby-on-rails - 如何使用 fullcalendar 处理 DST 显示混乱
- c# - 如何使用 Visual Basic 将数据从 txt 文件传输到 DataGridView
- java - 在时间戳之间从 Firebase 检索数据
- javascript - 渲染 Big React 日历时出现控制台错误
- javascript - 如何访问 JS 对象中嵌套项的索引?
- ios - 观察员被过度释放或被砸
- telegram-bot - 为什么我不能通过它的 id 发送贴纸
- python - 编译时的 DEF 变量 + 强制转换 - Cython
- powershell - 在 AD 中查找用户
- python - 如何优化 TensorFlow CNN?