居中以编程方式创建的窗口

| 我一直在这里使用示例来创建一个自定义的无标题栏的窗口: 在Mac OS X上绘制自定义窗口 我发现这是我可以在Leopard,Snow Leopard和Lion中创建无标题栏的窗口的唯一方法,其他方法在Leopard或Lion上都不起作用。 (如果我尝试通过普通的NSWindow和IB调用无标题栏的窗口,它将不再在Leopard中启动) 到目前为止,这个无标题栏的自定义窗口在任何地方都适用,但是我无法居中,仅在Interface Builder中处于固定位置。 使用[window center]将正常的NSWindow * window实现居中很容易,但是我发现在此自定义窗口子类上没有任何可用的东西,该窗口不是通过Interface Builder从nib创建的。 我已经尝试了NSWindow的一些功能,但是似乎没有任何效果。 有任何想法吗?     
已邀请:
CGFloat xPos = NSWidth([[window screen] frame])/2 - NSWidth([window frame])/2;
CGFloat yPos = NSHeight([[window screen] frame])/2 - NSHeight([window frame])/2;
[window setFrame:NSMakeRect(xPos, yPos, NSWidth([window frame]), NSHeight([window frame])) display:YES];
这将其置于屏幕的文字中心,而不考虑扩展坞和菜单栏所占用的空间。如果要这样做,请将
[[window screen] frame]
更改为
[[window screen] visibleFrame]
。     
extension NSWindow {
    public func setFrameOriginToPositionWindowInCenterOfScreen() {
        if let screenSize = screen?.frame.size {
            self.setFrameOrigin(NSPoint(x: (screenSize.width-frame.size.width)/2, y: (screenSize.height-frame.size.height)/2))
        }
    }
}
    
问题可能应该是为什么
[window center]
不起作用。但假设是这种情况,请使用
NSScreen
获取屏幕坐标,进行数学运算并直接将窗口居中。     
Swift版本:可以为同一个编写一个简单的静态实用程序函数
static func positionWindowAtCenter(sender: NSWindow?){
        if let window = sender {
            let xPos = NSWidth((window.screen?.frame)!)/2 - NSWidth(window.frame)/2
            let yPos = NSHeight((window.screen?.frame)!)/2 - NSHeight(window.frame)/2
            let frame = NSMakeRect(xPos, yPos, NSWidth(window.frame), NSHeight(window.frame))
            window.setFrame(frame, display: true)
        }
}
    
我偶然发现了同样的问题。对我有用的是在调用
center()
之前将
NSWindow
对象上的
isRestorable
设置为
false
。     

要回复问题请先登录注册