根据表中的行数调整 NSTableView 或 NSScrollView 的大小

Posted

技术标签:

【中文标题】根据表中的行数调整 NSTableView 或 NSScrollView 的大小【英文标题】:Resize NSTableView or NSScrollView depending on number of rows in table 【发布时间】:2012-05-01 06:54:25 【问题描述】:

我有一个基于视图的 NSTableView,它嵌入在 NSScrollView 中。它具有 x 像素高的自定义单元格。 NSScrollView 与作为子视图的面板大小相同。我想根据表中有多少行来调整整个 NSTableView 的大小。

除调整大小外,一切正常。在 IB 中手动调整滚动视图的大小似乎有预期的效果,但 NSSrollView 似乎没有调整其视图大小的类方法(就像 NSView 有 setFrame)。我应该调整 scollview、tableview 的大小,还是两者兼而有之? NSScrollView 是否有我缺少的 setFrame 方法或类似方法?

谢谢。

【问题讨论】:

为什么需要这样做?如果您在 Interface Builder 中放置 NSTableView,它已经在滚动视图中,并且一切都为您管理。 【参考方案1】:

在您尝试以编程方式执行此操作之前,请确保您已在 nib 文件中正确设置了大纲视图的自动调整大小掩码。听起来您只是希望大纲视图(及其滚动视图)始终保持与其内部窗口相同的大小。

默认情况下,您放置到窗口中的 NSScrollView/NSOutlineView 组合的自动调整大小掩码如下所示:

换句话说,它设置为始终保持与现在相同的大小,无论您将窗口大小调整为多大。

您要做的是将自动调整大小的蒙版更改为如下图所示:

为此,您可以在白色的自动调整大小框内点击红色虚线,将其切换为红色实线。一旦以这种方式配置,滚动视图(和表格视图)将始终(自动)调整为与其所在窗口相同的大小。

可能还有一种方法可以使用 Lion 的新“自动布局”功能来实现这一点,但我必须把它留给有更多经验的人。

【讨论】:

我不知道我可以在 IB 中做到这一点!谢谢你这么彻底的回答。【参考方案2】:

如果您确实需要这样做(例如,当您希望所有行都适合滚动视图以减轻滚动需要时)并且滚动视图只是您可以执行的窗口/视图的一部分:

[[myTableView enclosingScrollView] setFrame:newFrameRect];

【讨论】:

我尝试了这种技术,但表格没有视觉更新,是否需要使用其他命令?【参考方案3】:
scrollview.frame = CGRrectMake(x, y, w, h);

【讨论】:

以上是关于根据表中的行数调整 NSTableView 或 NSScrollView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个表中的条件计算表中的行数

如何根据swift中的行数调整UICollectionView contentSize.height

如何根据文本内容增加 NSTableView 中的行高?

根据日期和在 Snowflake 中的另一个表中为该日期列出的最大行数限制插入到表中的行

正确调整基于视图的 NSTableView 上的行大小

如何删除EXCEL表中的大量数据行,要删除的行数大概8万