如何使带有选项卡视图的视图可滚动?

Posted

技术标签:

【中文标题】如何使带有选项卡视图的视图可滚动?【英文标题】:How Can I Make a View, With a Tab View in It, Scrollable? 【发布时间】:2020-04-01 13:40:14 【问题描述】:

我在 NSView 中有一个 NSTabView。该 NSView 在 NSClipView 中,而 NSClipView 又在 NSScrollView 中。它看起来像这样(绿色为 NSTabView,红色为 NSView):

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

如何使 NSTabView 占用所需的空间(不会剪掉),并用它扩展 NSView?然后,NSScrollView 就可以处理过度生长的 NSView 的滚动了。

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

这只是其中的一部分;现在是整个层次结构的样子:

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

【问题讨论】:

你是如何设置滚动视图的? This 应该提供一些线索。 我设置了约束,以便 NSTabView 在其父视图内展开。它的超级视图在滚动视图的剪辑视图中。但是,这会导致 NSTabView 扩展与其父视图中的空间一样多,从而剪裁其内容。我不希望内容被剪掉;相反,我希望 NSTabView 在不剪切其内容的情况下占用所需的空间。我怎样才能做到这一点?我已经阅读了文档,仍然一无所知! 【参考方案1】:

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

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

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

要更改此设置,请选择文档视图,然后在 Size Inspector 下将“布局”类型更改为“自动”。

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

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

class FlippedView: NSView 
    override var isFlipped: Bool  true 

【讨论】:

使用约束将该文档视图固定到剪辑视图的顶部、左侧和右侧,为我完成了这项工作!我什至没有想过将文档视图的布局设置为“自动”!非常感谢,非常感谢您的帮助。

以上是关于如何使带有选项卡视图的视图可滚动?的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试在选项卡活动中实现可搜索的列表视图

低于一定速度时停止滚动视图动画

在 WPF 中开始时绑定所有选项卡项视图模型

嵌入式GUI LVGL『Tableview选项卡控件』介绍

嵌入式GUI LVGL『Tableview选项卡控件』介绍

滚动视图中的最后一个视图在我的选项卡活动中不可见