我如何制作一个带有选项卡视图的可滚动视图?

How Can I Make a View, With a Tab View in It, Scrollable?

我在 NSView 中得到了一个 NSTabView。 NSView 在 NSClipView 中,而 NSClipView 又在 NSScrollView 中。它看起来像这样(绿色的 NSTabView,红色的 NSView):

如您所见,NSTabView 的内容被剪裁,并且没有出现滚动条(因为视图没有扩展到 window 之外)。

如何让 NSTabView 尽可能多地占用 space(不剪掉),并用它扩展 NSView?然后,NSScrollView 可以处理长满的 NSView 的滚动。

由于我的内容是动态变化的,所以我不想为 NSTabView 的超级视图的宽度和高度设置一些硬性值。

这只是一部分;现在整体层次结构如下:

我希望 NSTabView 的超级视图可以滚动而不是裁剪,像这样:

我将描述的设置是针对 NSTabView 的设置,它将固定到滚动视图的顶部、左侧和右侧。请注意 NSTabView 可以替换为任何其他 NSView,设置相同。

从将滚动视图放入 xib/storyboard 开始,您将拥有 NSScrollView -> NSClipView -> NSView (document view)。将 NSScrollView 限制在 window 的边缘。将您的 NSTabView 放到 NSView 实例上。添加约束,使您的 NSTabView 边缘约束等于 NSView 并在定义它的选项卡视图中使用其他内容显式或隐式定义高度约束。

我个人喜欢更改 NSView 实例(文档视图)布局以使用约束,默认情况下它使用自动调整掩码,这使得它很难与 NSTabView 保持同步。我们希望将文档视图固定到滚动视图的顶部、左侧和右侧。此视图的大小决定了可滚动区域,因此我们希望它与 NSTabView 的大小相同,因此选项卡视图的高度将决定可滚动区域。

要更改它,select 文档视图,在大小检查器下,我们要将 "Layout" 类型更改为 "Automatic"。

最后,在顶部、左侧和右侧添加约束,您应该可以开始了。

如果您希望滚动视图从顶部而不是底部开始,您应该子类化文档视图并覆盖 isFlipped:

class FlippedView: NSView {
    override var isFlipped: Bool { true }
}