macos - 基于 NSSplitViewController 的应用程序几乎永远不会以正确的大小启动

标签 macos cocoa nstabviewcontroller nssplitviewcontroller

我有一个使用 NSSplitViewController 作为根的应用程序,并连接了一个 NSTabViewController 作为其详细 View Controller 。

此应用程序设置为以 1024x768 启动。左 Pane 应以 320x768 启动,右 Pane (tabViewController 所在位置)应以 704x768 启动。

我运行此应用程序 10 次,其中有 9 次会以不正确的尺寸(大约 500x500)启动。其他奇怪的事情是这个应用程序不应该是可扩展的,但是如果您将鼠标悬停在窗口边框附近,您会看到光标指示可缩放。

我希望它以正确的大小启动,并且没有可扩展选项。

这两个设置都在界面生成器上,但被忽略。

You can download a sample project that demonstrates the problem, here 。停止并运行该项目几次以查看问题。

如何解决这个问题?

最佳答案

我无法确定导致问题的原因,但解决该问题的一种方法是添加一些约束。 Interface Builder 不允许您约束它插入到 Split View的左侧和右侧面板中的默认 NSView 实例,因此您需要添加自己的实例。下面的屏幕截图 取自您的演示,但在我完成以下操作之后:

  1. 向左侧拆分添加了一个 subview (我的内容 View ),并将其边缘固定到其 super View 的边缘(Xcode 自动添加到 Split View的 View )
  2. 我的内容 View 添加了 320 像素的显式宽度限制

enter image description here

当我加载应用程序时,两个分割都可见,分隔线不会移动,并且窗口无法调整大小。

更新 - 更好的解决方案

虽然约束是解决这个问题的一种方法,但我认为问题的根源在于 Interface Builder 中的一些意外行为。当您将 NSSplitViewController 对象拖到 Canvas 上,并使其成为窗口 Controller 的 content window 关系的目标时,分割 View Controller 的 view实际上并未设置 socket 。这样做的一个后果似乎是,当您加载应用程序时,分隔线似乎位于一侧。要解决此问题,请将上述 View 导出设置为指向 Split View:

enter image description here

我创建了一个 demo project其设置类似于提问者的演示应用程序中的设置。

关于macos - 基于 NSSplitViewController 的应用程序几乎永远不会以正确的大小启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28190009/

相关文章:

macos - 在cocoa中获取键盘输入

multithreading - 我应该在UI Action 中使用后台线程吗?

objective-c - 单击关闭按钮时终止应用程序

objective-c - 如何在 OS X 10.6 上构建可在 10.5 上运行的应用程序和框架?

mysql - 如何修复 Zsh 中的 "command not found: mysql"

macos - Cocoa可编辑文本,无输入框

macos - 为什么苹果 vim 编译时没有隐藏功能?

ios - TabviewController如何显示未读消息(如角标(Badge))?

swift - 标签栏 Controller 不会在 Swift 中显示标签栏项目