NSOutlineView使用自动换行的单元格:行高

3

我正在尝试实现一个具有多行单元格的NSOutlineView

根据来自此网站和其他网站的建议,我已经在视图的代理中编写了以下代码。

- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item {
    NSTableColumn *column = [outlineView outlineTableColumn];
    NSCell *cell = [column dataCell];

    [cell setStringValue:[item valueForKey:@"label"]];

    return [cell cellSizeForBounds:NSMakeRect(0.0, 0.0, [column width], CGFLOAT_MAX)].height;
}
这个轮廓表格的列中的单元格被设置为自动换行。 然而,我遇到了奇怪的图形问题——文本行重叠,如http://screencast.com/t/ewJUwRmlGZqh所示。单元格似乎已获得正确大小,但没有将底层单元格向下推。
有人能帮我吗?
2个回答

1

(这是作为建议的编辑发布的,但应该是自己的答案。我不知道它是否有意义。@asavartsov:请随时将此答案重新发布为您自己的答案,并留下评论,以便我删除此副本。)

每当有人请求项目的行高度时,就会调用此委托。这通常发生在由边界更改引起的绘图操作中。但是,如文档所述,

NSTableView 可能会缓存此方法返回的值,因此,如果要更改行的高度,请确保通过调用 noteHeightOfRowsWithIndexesChanged: 来使行高度无效。 NSTableView 会在 reloadDatanoteNumberOfRowsChanged 中自动使其整个行高度缓存无效。

当需要调整行高度时,您需要调用 noteHeightOfRowsWithIndexesChanged:reload,这将导致表格为每个可见单元格调用此方法,从而执行调整大小。


1

就我所知,这个委托方法只在重新加载表格单元格数据时调用,而不是在其他事件(如边界更改)期间调用。

当需要调整行高度时,您需要调用重新加载,这将导致表格为每个可见单元格调用此方法,并因此执行调整大小操作。


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