2011-03-24 60 views
3

我试图实现与多个系细胞的NSOutlineViewNSOutlineView与文字环绕细胞:heigthOfRow

继从这个和其他网站的建议,我想出了在视图的委托下面的代码。

- (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。看起来单元格的尺寸合适,但不能压低底层单元格。

有人可以帮助我吗?

回答

1

关闭我的头顶,我敢肯定重装表格单元格的数据时,而不是在其他事件像一个界限改变此委托方法只调用。

你需要调用一个重载时,它的时间来调整行高,这将导致表调用此方法对每个可见单元格的,因此进行大小调整。 。

1

(这被张贴作为suggested edit,但应该是一个自己的答案,我不知道这是否有意义或不@asavartsov:随意转贴这个答案你自己的,留下我一个评论,所以我会删除这个副本。)

这个代表每当有人要求行高在项目时调用。发生这种情况,特别是在按边界变化进行排序的绘图操作中。但是,正如文件中指出,

NSTableView可以缓存值此方法返回,所以如果你想改变行高,确保通过调用noteHeightOfRowsWithIndexesChanged:无效行的高度。 NSTableView会自动使其整个行高缓存在reloadDatanoteNumberOfRowsChanged之内无效。

你需要调用noteHeightOfRowsWithIndexesChanged:reload当它的时间来调整行高,这将导致表调用此方法对每个可见单元格的,因此进行大小调整。