4

我想将我的 NSWindow 大小设置为屏幕大小的函数。

Interface Builder 中有一个选项可以将其设置为点,但不是屏幕大小的函数。

如何以编程方式将其设置为默认值?

请注意,如果此类状态可用,我仍然希望 UI 保留从上一个会话中恢复其大小。

4

2 回答 2

8

好吧,你可以得到屏幕的大小,只需对其进行一些数学运算即可使其正常工作。将窗口的尺寸设置为屏幕尺寸乘以您希望窗口占用的屏幕百分比。更进一步,您可以这样做并通过将其原点乘以 (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];
于 2013-11-21T14:45:31.690 回答
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对于测试,删除自动保存信息可能会有所帮助。

于 2015-08-28T16:00:53.167 回答