根据表中的行数调整 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