我正在開發一個mac應用程序,並且我喜歡讓初始窗口處於最大化狀態,就像當您按下帶加號的綠色按鈕一樣。 我不希望它是全屏。OSX應用程序:如何使窗口最大化?
回答
通過使用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)
}
}
在其放大狀態的應用程序是不一樣的東西「最大化」。綠色加號圖標表示縮放,意思是「適合此內容的尺寸」。在一些可見框架的應用程序中(如Eric D.所討論的),但它可以是幾乎任何東西。例如嘗試縮放Safari窗口。
假設你真的想要「最大化」而不是「縮放」,那麼埃裏克是在正確的軌道上,但它可以做得更好。首先,你應該使用窗口的屏幕,如果它有一個。此外,您不應該在啓動時調整窗口大小(因爲啓動時可能看起來很尷尬)。
func applicationDidFinishLaunching(aNotification: NSNotification) {
if let screen = window.screen ?? NSScreen.mainScreen() {
window.setFrame(screen.visibleFrame, display: true)
}
}
你可能要考慮使用NSWindowController
來管理這個,而不是把它在應用程序委託。在這種情況下,你可以把它放在windowDidLoad
。窗口控制器是AppKit中非常常見的工具(與視圖控制器相反,這在歷史上不常見)。
如果您確實需要縮放行爲,請熟悉NSWindowDelegate
方法windowWillUseStandardFrame(_:defaultFrame:)
。您不應該在啓動時直接調用zoom(_:)
,因爲它會生成動畫,但是無論您在代理中執行的任何邏輯都應該用於計算幀。再次,確保調整你的框架,使其在屏幕上顯示,如果它有一個,而不是主屏幕。
理想情況下,您應該尊重用戶使用的最後一幀,而不是將其強制到可見幀。如果你想研究更多的話,那在Cocoa中叫做frameAutosave
。如果您只是在界面生成器中設置自動保存名稱,窗口控制器將幫助您自動管理該功能。 (雖然稍微複雜一些,需要首次啓動時計算幀以獲取可見幀,因此它不會完全自動)。
在使默認幀成爲任何可見幀之前,請仔細考慮一下案件。在大型顯示器上這可能非常巨大(仍然有很多30英寸的Cinema顯示器,但即使在27英寸的顯示器上,它也可能非常令人難以置信)。有時根據您的應用程序,這很好,但我經常發現,定義最大初始大小是值得的(同時允許用戶使其更大)。
嗨,大家好我真的很感謝你的幫助。
我正在處理基於文檔的mac應用程序。我把你提供的代碼放在Document類的makeWindowControllers()中,它就像一個魅力一樣。
非常感謝。這是我使用的代碼。
override func makeWindowControllers() {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as! NSWindowController
self.addWindowController(windowController)
if let screen = NSScreen.mainScreen() {
windowController.window?.setFrame(screen.visibleFrame, display: true, animate: true)
}
}
- 1. 如何最小化窗口使窗口應用程序中使用快捷鍵最大化窗口使用C#?
- 2. 如何最大化窗口?
- 3. 如何最大化窗口?
- 4. 最小化Chrome應用程序窗口
- 5. OSX最大窗口高度
- 6. 最大化矩形以適應應用程序窗口QML
- 7. 啓用最大化窗口的Eclipse 3.x RCP應用程序?
- 8. 如何在最小化窗口後最大化窗口
- 9. 如何使用最小化/最大化窗口控件顯示Qt.Tool窗口?
- 10. 關閉應用程序的窗口(OSX)
- 11. Chrome打包應用程序窗口,當我最小化時自動調整大小 - 然後最大化窗口
- 12. 如何使用Addon SDK跟蹤窗口最小化/最大化?
- 13. 最大化其他應用程序(VB .Net)的子窗口I'
- 14. 在MFC窗口應用程序中刪除最大化狀態
- 15. 如何最大化任務欄中打開的應用程序窗口並使用python最小化?
- 16. 如何在最小化應用程序時彈出窗口?
- 17. 禁用窗口最大化/最小化
- 18. 窗口最大化最大化
- 19. 使用Netbeans自動最大化窗口
- 20. 使用SDL處理最大化窗口
- 21. 使用webdriver最大化IE 9窗口
- 22. 使用AutoHotkey最大化窗口?
- 23. 如何開始Pygame窗口最大化?
- 24. 如何在XNA中最大化窗口
- 25. 如何最大化Windows移動窗口?
- 26. 在Xcode mac osx AppleScript應用程序(AppleScriptObjC)中,我最小化主應用程序窗口的命令是什麼?
- 27. WPF窗口應用程序大小也改變時也NoResize和最大化
- 28. 窗口最小化和最大化
- 29. 以編程方式最大化外部應用程序的窗口(vb.net)
- 30. WPF窗口最大化
對不起,我是非常新的mac世界。我只是把這個代碼放在NSViewController:viewDidLoad中,它不工作,你可以告訴我在哪裏準確地放置這段代碼。這是我的代碼,如果讓屏幕= NSScreen.mainScreen(){ self.view.window?.setFrame(screen.visibleFrame,display:true,animate:true) } –
用示例更新我的答案。 – Moritz
更新Swift 3:只需用'.main()'替換'.mainScreen()'。 – Moritz