我想将我的 NSWindow 大小设置为屏幕大小的函数。
Interface Builder 中有一个选项可以将其设置为点,但不是屏幕大小的函数。
如何以编程方式将其设置为默认值?
请注意,如果此类状态可用,我仍然希望 UI 保留从上一个会话中恢复其大小。
我想将我的 NSWindow 大小设置为屏幕大小的函数。
Interface Builder 中有一个选项可以将其设置为点,但不是屏幕大小的函数。
如何以编程方式将其设置为默认值?
请注意,如果此类状态可用,我仍然希望 UI 保留从上一个会话中恢复其大小。
好吧,你可以得到屏幕的大小,只需对其进行一些数学运算即可使其正常工作。将窗口的尺寸设置为屏幕尺寸乘以您希望窗口占用的屏幕百分比。更进一步,您可以这样做并通过将其原点乘以 (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];
进一步了解 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
对于测试,删除自动保存信息可能会有所帮助。