2015-10-01 109 views
4

我正在使用OS X(10.11,Xcode 7.0)的最新默认项目。它使用故事板和层次结构如下:如何设置主窗口的位置和大小(编程)?

Window Controller -> View Controller 

我想设置窗口的初始位置和帧大小。显然,用户可以改变它,但我希望它以一些默认值开始。我试过子类NSWindowController,但这没有效果。

class WindowController: NSWindowController { 

    override func windowDidLoad() { 
     super.windowDidLoad() 

     guard let window = window else { 
      return 
     } 

     let windowOriginPoint = CGPoint(x: 0, y: 0) 
     let windowSize = CGSize(width: 800, height: 400) 
     window.setFrame(NSRect(origin: windowOriginPoint, size: windowSize), display: true) 

     print("windowDidLoad") 
    } 

    } 

这样做的正确方法是什么?

+0

你是否已将窗口控制器连接到故事板? – mangerlahn

+0

通过“connected”,你的意思是我是否将属性检查器中的类名称设置为我的类的名称?我有。 –

+1

我会对此进行更深入的研究 – mangerlahn

回答

2

我面临同样的问题。我通过将setFrame代码移入windowDidBecomeMain而不是windowDidLoad来解决它;如果窗口已被手动移动并重新选择为主窗口,则会产生不良影响:拖动时窗口跳转并立即返回到正确的位置。为了避免它,我用了一个补丁:在windowController,我宣布一个

private var firstAppearance = true; 

windowDidBecomeMain我做SETFRAME只firstAppearance;然后我将firstAppearance设置为false。