dev*_*ter 9 cocoa center nswindow
我一直在使用这里的示例创建一个自定义无标题栏窗口:
我发现这是我在Leopard,Snow Leopard和Lion中创建无标题栏窗口的唯一方法,其他方法在Leopard或Lion上都无法正常工作.(如果我尝试通过正常的NSWindow和IB调用无标题栏的窗口,它将不再在Leopard中启动)
到目前为止,这个自定义无标题栏的窗口在任何地方都很有用,但是我无法将它居中,只是在Interface Builder中只有一个固定的位置.
使用[窗口中心]将正常的NSWindow*窗口实现集中在一起相当容易,但我发现在这个自定义窗口子类上没有任何效果,这个窗口不是通过Interface Builder从nib创建的.
我从NSWindow尝试过一些东西,但似乎没什么用.
有任何想法吗?
小智 17
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];
Run Code Online (Sandbox Code Playgroud)
这将它放在屏幕的文字中心,而不考虑底座和菜单栏占用的空间.如果您想这样做,请更改[[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))
}
}
}
Run Code Online (Sandbox Code Playgroud)