如何隐藏空项目的NSTableView网格线/分隔线

4
我有一个很大的NSTableView,但只有几个项目,并且通过网格线/分隔符进行分隔。一切都很好,除了下面是一堆空白项目的网格线。如何才能显示存在的项目的网格线,但对于不存在的项目只有纯色背景呢?
注意:UITableView有一种设置footerView的方法,但NSTableView不支持这种方法,否则只需将大型空视图设置为footer...

1
如果您正在使用基于视图的 NSTableView(为什么不呢?),您可以子类化 NSTableRowView 并在其 -drawBackgroundInRect: 中自行绘制网格线。 - Elwisz
2个回答

7
我想出了一种方法:
在界面构建器中,将tableview的“行高”设置为非常大的数字,例如10000,并将其设置为“固定”。在代理中实现tableView:heightOfRow:
例如,在Swift中:
func tableView(tableView: NSTableView!, heightOfRow row: Int) -> CGFloat {
        return 50
}

这意味着没有内容的单元格非常大,以至于你看不到网格线,因为上述方法似乎仅适用于现有单元格。另一种方法是根据Elwisz评论实现NSTableRowView的drawBackgroundInRect:。

1
将行高设置为较大数字的问题在于它会影响鼠标滚轮滚动。当设置为10000时,鼠标滚轮的一个刻度就会滚动整个视图。但对于触摸板滚动来说效果还不错。 - btschumy

0

在 Interface Builder 或程序中将 NSTableView.rowHeight 设置为一个非常大的数字。

然后实现

#pragma mark - NSTableViewDelegate

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row{
    return 60;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接