我正在开发一个mac应用程序,我喜欢使初始窗口处于最大化状态,就像你按下带加号的绿色按钮一样.我不希望它是全屏的.
处于缩放状态的应用程序与"最大化"不同.绿色加号图标表示缩放,表示"此内容的适当大小".在某些应用程序中,这是可见的框架(正如Eric D.讨论的那样),但它几乎可以是任何东西.例如,尝试缩放Safari窗口.
假设你真的想要"最大化"而不是"缩放",那么Eric在正确的轨道上,但它可以做得更好.首先,你应该使用窗口的屏幕(如果有的话).此外,您不应在启动期间为窗口调整大小设置动画(因为在启动时看起来很尴尬).
func applicationDidFinishLaunching(aNotification: NSNotification) { if let screen = window.screen ?? NSScreen.mainScreen() { window.setFrame(screen.visibleFrame, display: true) } }
您可能需要考虑使用a NSWindowController
来管理它而不是将其放在应用程序委托中.在这种情况下,你可以把它放进去windowDidLoad
.窗口控制器是AppKit中非常常见的工具(与视图控制器相反,它在历史上并不常见).
如果您确实想要缩放行为,请熟悉该NSWindowDelegate
方法windowWillUseStandardFrame(_:defaultFrame:)
.您通常不应该zoom(_:)
直接调用启动,因为它会设置动画,但是您在委托中执行的任何逻辑都应该用于计算帧.再次,确保调整框架以在窗口的屏幕上显示,如果它有一个,而不是主屏幕.
理想情况下,您应该尊重用户使用的最后一帧而不是强制它到可见帧.frameAutosave
如果你想研究更多,可以在Cocoa中调用它.如果您只是在Interface Builder中设置自动保存名称,窗口控制器将帮助您稍微自动管理.(虽然由于需要在首次启动时计算帧以获得可见帧,但稍微复杂一点,因此它不会完全自动化.)
在任何情况下使默认框架成为可见框架之前,请仔细考虑.这在大型显示器上可能真的很大(那里仍然有很多30英寸的Cinema显示器,但即使在27英寸显示器上也可能非常强大).有时这很好,取决于你的应用程序,但我经常发现值得定义一个最大的初始大小(同时允许用户使其更大).
您可以使用NSScreen visibleFrame
作为目标框架将窗口"缩放"到最大可用空间.让我们说window
你的NSWindow IBOutlet:
if let screen = NSScreen.mainScreen() { window.setFrame(screen.visibleFrame, display: true, animate: true) }
例如,在AppDelegate.swift中:
import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! func applicationDidFinishLaunching(aNotification: NSNotification) { if let screen = NSScreen.mainScreen() { window.setFrame(screen.visibleFrame, display: true, animate: true) } }