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 填充行)。