将 contentViewController 设置为 NSTabViewController 后,NSWindow 以错误的大小启动

til*_*ait 5 macos nsview nswindow nswindowcontroller nstabviewcontroller

我有一个 Xcode 项目,NSWindowControllercontentViewController设置为NSViewController. 我最近删除NSViewController从故事板子类,并取代了contentViewController用一个NSTabViewController子类。

现在,当我运行应用程序时,NSWindow打开的大小为 500x500,而不是第一个选项卡的大小。更重要的是,有没有看法,我可以在具有尺寸500×500的故事板看到,而且尺寸不是编程,无论是。窗口本身设置为不同的大小,NSTabViewController第一个NSViewController.

我假设我必须在某处设置某种约束,但如果有,我不知道在哪里/如何找到它。使用 Xcode 9.2 和 High Sierra。

windowDidLoad()工作中以编程方式将窗口的大小设置为正确的大小,但是如果我改变了视图的大小,我也必须改变它,这会很快变旧。

对不起,如果这是模糊的;我真的不知道什么样的屏幕截图或代码片段会有所帮助。

Jos*_*nch 7

我最近也遇到了这个令人沮丧的问题。

有几个选项可以解决此问题:

  1. 正如您所提到的,preferredContentSize在每个自定义视图控制器中设置将选项卡的内容保存为您想要的大小。这是不灵活的,但它确实有效。

    // Swift
    class FooViewController: ViewController {
    
        override func viewWillAppear() {
            super.viewWillAppear()
    
            preferredContentSize = NSSize(width: 400, height: 280)
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我在这个SO 答案中找到了一个更好的解决方案的提示。您可以向处理选项卡内容的视图控制器的主视图添加子视图(stackview、nsview 等...),然后添加将其固定到每个边缘的约束并添加设置大小的约束。

这是它在 Interface Builder 中的样子的屏幕截图。我添加了一个堆栈视图,然后添加了 6 个约束。

希望这可以帮助。