【发布时间】:2018-04-20 07:56:27
【问题描述】:
我在 Xcode 9(采用 SceneKit 技术的 macOS 游戏)中开始新项目。我的故事板包含NSWindowController 和NSWindow 以及相关的GameViewController 和SCNView。项目运行良好(旋转飞机)。
现在在情节提要中,我将 NSWindow 的自动保存值设置为“MainWindow”,运行项目,调整窗口大小然后退出。我知道在退出窗口位置设置自动保存将使用NSUserDefaults 保存,所以我在终端检查:
$ defaults read com.koati.Bloks ⏎
{
"NSWindow Frame MainWindow" = "415 228 450 322 0 0 1280 777 ";
}
这是预期的行为。现在我再次运行项目,但我看到窗口位置没有恢复。如果在情节提要中删除GameViewController 关系,则位置会被正确保存和恢复,所以我认为GameViewController 会以某种方式影响窗口大小和位置。
在带有 XIB 的旧 Xcode 中没有这样的问题。
编辑:经过一些测试,我现在认为它与 SceneKit 完全无关,因为在 NSViewController 中将 SCNView 替换为 NSView 会产生相同的结果。所以我认为问题在于 NSViewController 通过 Storyboard 附加到 NSWindow 内容会影响窗口位置和大小。
也许有人知道如何解决这个问题?
【问题讨论】:
-
我遇到了同样的问题,同意你的观察。我有一个针对这个问题的测试项目。来自模板的默认值:Window->View Controller->View 保留位置和大小。如果我替换为 Window->Split View Controller->View 它不会保留位置和大小(始终返回默认位置和大小)。如果我再次执行 Window->View Controller->View->Container View->Split View Controller->View,它会保留大小和位置。
标签: macos cocoa storyboard xcode9