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

标签 macos nsview nswindow nswindowcontroller nstabviewcontroller

我有一个带有 NSWindowController 的 Xcode 项目谁的contentViewController被设置为 NSViewController 的子类.我最近删除了 NSViewController Storyboard中的子类并替换了 contentViewControllerNSTabViewController子类。

现在,当我运行应用程序时,NSWindow以 500x500 的大小打开,而不是第一个选项卡的大小。更重要的是,我在 Storyboard中看不到大小为 500x500 的 View ,而且该大小也不是以编程方式设置的。窗口本身设置为不同的大小,就像 NSTabViewController 中的 View 一样。的第一个 NSViewController .

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

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

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

最佳答案

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

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

  • 正如你提到的,设置 preferredContentSize在每个自定义 View Controller 中,将选项卡的内容保存为您想要的大小。这是不灵活的,但它确实有效。
    // Swift
    class FooViewController: ViewController {
    
        override func viewWillAppear() {
            super.viewWillAppear()
    
            preferredContentSize = NSSize(width: 400, height: 280)
        }
    }
    
  • 我在 this 中找到了一个更好的解决方案的提示所以回答。您可以向处理选项卡内容的 View Controller 的主 View 添加 subview (stackview、nsview 等...),然后添加将其固定到每个边缘的约束并添加设置大小的约束。

  • 这是一个 screenshot它在 Interface Builder 中的样子。我添加了一个堆栈 View ,然后添加了 6 个约束。

    希望这可以帮助。

    关于macos - 将 contentViewController 设置为 NSTabViewController 后,NSWindow 以错误的大小启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48516221/

    相关文章:

    objective-c - 如何将图像从浏览器拖放到 Cocoa 应用程序

    iphone - UIView.subviews 和 [NSView subviews] 之间的行为差​​异

    objective-c - 滑动但不点击

    swift - 将 NSWindow 放置在屏幕顶部,没有 1 像素边距。

    cocoa - NSWindow 如何知道它是可见的?

    javascript - 使用 Apple Remote 播放/暂停 Soundcloud 选项卡的脚本

    python - 为尝试安装 OpenCV 的 Mac 编辑 bash_profile 后 Python 路径不正确

    swift3 MacOS 在 NSView 的子类中设置 Tag

    objective-c - OSX 应用程序的向后兼容性