我想将NSWindow大小设置为屏幕尺寸的函数。
Interface Builder中有一个选项可以按点设置它,但不能作为屏幕尺寸的函数。
如何以编程方式将其设置为默认值?
请注意,如果此状态可用,我仍希望UI保留从之前的会话恢复其大小。
答案 0 :(得分:5)
嗯,你可以获得屏幕的大小,只需应用一点数学就可以实现这个功能。将窗口的尺寸设置为屏幕尺寸乘以您希望窗口占据的屏幕百分比。更进一步,你可以这样做,并通过将其原点乘以(1-percentage)/2.0来保持窗口居中。
NSRect screenSize = [[NSScreen mainScreen] frame];
CGFloat percent = 0.6;
CGFloat offset = (1.0 - percent) / 2.0;
[self.window setFrame:NSMakeRect(screenSize.size.width * offset, screenSize.size.height * offset, screenSize.size.width * percent, screenSize.size.height * percent) display:YES];
答案 1 :(得分:4)
将0x7fffffff的答案更进一步:这里是一个完整的Swift解决方案,适用于自动保存。使用XCode 7 Beta 6进行测试。
在界面构建器中,将窗口类设置为MainWindow
,并在窗口的属性检查器中指定自动保存名称。以下代码仅在尚未存在自动保存信息时设置窗口坐标,即第一次显示窗口。之后(例如在重新启动应用程序之后)窗口将恢复到它的最后位置和大小。
class MainWindow: NSWindow {
var didInitialResize = false
override func awakeFromNib() {
super.awakeFromNib()
let defaults = UserDefaults.standard
if !didInitialResize && defaults.object(forKey: "NSWindow Frame \(frameAutosaveName)") == nil {
didInitialResize = true
let screenSize = NSScreen.main!.frame
let percent = CGFloat(0.90)
let offset: CGFloat = CGFloat((1.0 - percent) / 2.0)
setFrame(NSMakeRect(
screenSize.size.width * offset,
screenSize.size.height * offset,
screenSize.size.width * percent,
screenSize.size.height * percent),
display: true)
}
}
}
顺便说一下..自动保存信息保存在应用程序的首选项文件中。对于测试,rm ~/Library/Preferences/myapp.plist; sudo killall cfprefsd
删除自动保存信息可能会有所帮助。