NSTableView 上不存在的多个单元格
Multiple cells that don't exist on NSTableView
我有一个包含 3 个单元格的 NSTableView。我已经使用以下代码调整了 table 视图以显示分隔符:
[self.tableView setGridColor:[NSColor lightGrayColor]];
[self.tableView setIntercellSpacing:NSMakeSize(1, 1)];
[self.tableView setGridStyleMask:NSTableViewDashedHorizontalGridLineMask];
当我渲染 table 时,我看到了这个:
table 显示了许多不应该存在的单元格,并且大小不同!
这正常吗?我如何摆脱那些 "phantom cells"?
您无法删除那些 "phantom" 单元格。这就是 table 视图的工作方式
如果不接受table,请查看 NSStackView or NSCollectionView 作为垂直堆叠单元格的方法(必须创建为自定义视图)。它们在呈现方面更灵活。
如果 table 中的所有 content 行大小相同,您可以使用 NSTableView
大小检查器指定大小。如果这样做,system-added 'padding' 行也将具有此大小。
为了摆脱与 system-added 行关联的网格线,下面的代码片段在一个非常快速的演示应用程序中为我工作(这个代码片段不是我自己的,它是从另一个答案中提取的Whosebug 问题)
// MyNSTableView.m (only need to override this one NSTableView method)
- (void)drawGridInClipRect:(NSRect)clipRect
{
NSRect lastRowRect = [self rectOfRow:[self numberOfRows]-1];
NSRect myClipRect = NSMakeRect(0, 0, lastRowRect.size.width, NSMaxY(lastRowRect));
NSRect finalClipRect = NSIntersectionRect(clipRect, myClipRect);
[super drawGridInClipRect:finalClipRect];
}
将两者结合起来会产生以下效果(我使用交替的行颜色来表明网格线确实 不是 为 system-added 填充行)。
我有一个包含 3 个单元格的 NSTableView。我已经使用以下代码调整了 table 视图以显示分隔符:
[self.tableView setGridColor:[NSColor lightGrayColor]];
[self.tableView setIntercellSpacing:NSMakeSize(1, 1)];
[self.tableView setGridStyleMask:NSTableViewDashedHorizontalGridLineMask];
当我渲染 table 时,我看到了这个:
table 显示了许多不应该存在的单元格,并且大小不同!
这正常吗?我如何摆脱那些 "phantom cells"?
您无法删除那些 "phantom" 单元格。这就是 table 视图的工作方式
如果不接受table,请查看 NSStackView or NSCollectionView 作为垂直堆叠单元格的方法(必须创建为自定义视图)。它们在呈现方面更灵活。
如果 table 中的所有 content 行大小相同,您可以使用 NSTableView
大小检查器指定大小。如果这样做,system-added 'padding' 行也将具有此大小。
为了摆脱与 system-added 行关联的网格线,下面的代码片段在一个非常快速的演示应用程序中为我工作(这个代码片段不是我自己的,它是从另一个答案中提取的Whosebug 问题)
// MyNSTableView.m (only need to override this one NSTableView method)
- (void)drawGridInClipRect:(NSRect)clipRect
{
NSRect lastRowRect = [self rectOfRow:[self numberOfRows]-1];
NSRect myClipRect = NSMakeRect(0, 0, lastRowRect.size.width, NSMaxY(lastRowRect));
NSRect finalClipRect = NSIntersectionRect(clipRect, myClipRect);
[super drawGridInClipRect:finalClipRect];
}
将两者结合起来会产生以下效果(我使用交替的行颜色来表明网格线确实 不是 为 system-added 填充行)。