【问题标题】:How to hide NSTableView gridlines / seperators for empty items如何隐藏空项目的 UITableView 网格线/分隔符
【发布时间】:2014-09-24 13:53:11
【问题描述】:

我有一个大的 NSTableView,只有几个项目,它们由网格线/分隔符分隔。除了在项目下方是一堆用于空项目的网格线之外,一切都很好。如何为存在的项目显示网格线,但为不存在的项目只显示纯背景?

注意:UITableView 有一种设置 footerView 的方法 - NSTableView 无法使用相同的方法,否则只会设置一个大的空视图作为页脚......

【问题讨论】:

  • 如果您使用基于NSTableView 的视图(为什么不应该这样做?),您可以继承NSTableRowView 并在其-drawBackgroundInRect: 中自己绘制网格线。

标签: objective-c cocoa swift nstableview


【解决方案1】:

我想出了一个办法:

在界面生成器中,将表格视图的“行高”设置为一个非常大的数字,即 10000,并将其设置为“固定”。在委托中实现 tableView:heightOfRow:

例如迅速:

func tableView(tableView: NSTableView!, heightOfRow row: Int) -> CGFloat {
        return 50
}

这意味着没有内容的单元格太大以至于您看不到网格线,因为上述方法似乎只对现有单元格调用。

根据 Elwisz 的评论,另一种方法是实现 NSTableRowView 的 drawBackgroundInRect:。

【讨论】:

  • 行高设置大的问题是影响鼠标滚轮滚动。当设置为 10000 时,鼠标滚轮的刻度会滚动整个视图。不过,对于触控板滚动效果很好。
【解决方案2】:

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

然后实施

#pragma mark - NSTableViewDelegate

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2020-10-21
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多