8

我有这个应用程序,它使用 aNSSplitViewController作为根,并有一个 NSTabViewControllerconnected 作为它的 detailViewController。

此应用程序设置为以 1024x768 分辨率启动。左窗格应在 320x768 处启动,而右窗格(tabViewController 所在的位置)应在 704x768 处启动。

从我运行这个应用程序的 10 次开始,9 次它会以不正确的大小(大约 500x500)启动。另一个奇怪的事情是这个应用程序不应该是可伸缩的,但是如果你将鼠标悬停在窗口边框附近,你会看到光标指示缩放。

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

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

您可以在此处下载演示该问题的示例项目。停止并运行项目几次以查看问题。

我该如何解决这个问题?

4

2 回答 2

19

我不能确定是什么导致了这个问题,但是你可以解决它的一种方法是添加一些约束。Interface Builder 不允许您约束它插入到拆分视图的左右面板中的默认 NSView 实例,因此您需要添加自己的实例。下面的屏幕截图取自您的演示,但在我完成以下操作后:

  1. 在左侧拆分(我的内容视图)中添加了一个子视图,并将其边缘固定到其父视图的边缘(视图 Xcode 自动添加到拆分视图)
  2. 向我的内容视图添加了 320 像素的显式宽度约束

在此处输入图像描述

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

更新 - 更好的解决方案

尽管约束是解决此问题的一种方法,但我认为问题的根源在于 Interface Builder 中的一些意外行为。当您将一个NSSplitViewController对象拖到画布上并使其成为窗口控制器关系的目标时,实际上并未设置content window拆分视图控制器的出口。view这样做的一个后果似乎是,当您加载应用程序时,分隔线似乎就在一侧。要解决此问题,请将上述视图出口设置为指向拆分视图:

在此处输入图像描述

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

于 2015-01-28T11:05:38.800 回答
1

作为参考,如果窗口内容 segue 指向一个NSTabViewController场景,也会出现同样的问题。打开大小为 500x500 的新窗口。

我通过在我的窗口和我的主选项卡视图控制器之间放置一个带有容器视图的普通视图控制器来解决它。然后窗口将使用容器视图的大小作为初始大小。

这是我所做的详细说明:

  1. 向情节提要添加了一个新的视图控制器场景
  2. 将该视图设置为我希望我的窗口最初使用的大小
  3. 向新的视图控制器场景添加了一个容器视图并添加了 4 个约束以使容器完全覆盖视图
  4. 将窗口的内容 segue 连接到新的视图控制器
  5. 最后将容器视图连接到我实际的选项卡视图控制器场景

前:

[Window Controller Scene] → [Tab View Controller]

后:

[Window Controller Scene] → [View Controller Scene] → [Tab View Controller]
                             (with Container View)
于 2018-10-03T13:17:03.870 回答