NSTableView行高基于NSStrings

ele*_*119 6 cocoa objective-c nstableview

基本上,我有一个带有1列的NSTableView,我在每行插入长字符串.但是,并非所有的字符串都很长,所以我希望每行的高度根据字符串的长度而有所不同.

我已经发现我需要询问它的宽度是多少,然后询问字符串如果柱子宽那么会占用多少行,然后决定NSCell的"高"程度.但是我到底该怎么做呢?我得到了以下的柱宽:

[[[tableView tableColumns] objectAtIndex:0] width];

但我无法弄清楚如何询问NSString将占用多少空间.或者,也许,我应该采取更好的方式来做这件事?

在此先感谢您的帮助.

Jos*_*zzi 10

创建一个NSTextFieldCell实例并匹配其字体/大小/等.到列的数据单元格.要求它-cellSizeForBounds:传递一个具有较大高度(FLT_MAX?)的列所需宽度的矩形.结果应该是NSSize,您可以使用它的高度.

如果您有多个多行文本列会变得更加棘手,因为您需要考虑该行中的所有单元格,将最大值作为行高.如果您希望平均有很多行,您可能希望缓存此工作,根据需要进行更新,然后在调用行高度委托方法时简单地引用它.


Rob*_*ida 8

代码按照上面的答案......

    NSString *string = [[_tableViewDataSourceArray objectAtIndex:rowIndex] 
                              valueForKey:@"StringToDisplay"];

    NSTableColumn *tableColoumn = [aTableView
                              tableColumnWithIdentifier:@"TableColumnIdentifier"];

    if (tableColoumn) 
    {
     NSCell *dataCell = [tableColoumn dataCell];
     [dataCell setWraps:YES];
     [dataCell setStringValue:string];
     NSRect myRect = NSMakeRect(0, 0, [tableColoumn width], CGFLOAT_MAX);
     heightOfRow =  [dataCell cellSizeForBounds:myRect].height;
    }
Run Code Online (Sandbox Code Playgroud)