1

我正在尝试将 CTFramesetterSuggestFrameSizeWithConstraints() 与 tableview:heightOfRow: 一起使用,输入带有 NSTableView 单元格属性的属性字符串。问题是它返回的值是 13.0 的倍数(13.0 表示 1 行,26.0 表示两行等),而不是预期的 14.0 倍数(对应于 [tableView rowHeight]。

NSDictionary * attributes = [[[[[tableView tableColumnWithIdentifier: @"Message"] dataCell] attributedStringValue]
                attributesAtIndex: 0 effectiveRange: NULL] retain];
NSAttributedString * attributedMessage = [[NSAttributedString alloc] initWithString: message attributes: attributes];
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributedMessage);

CFRange range;
CGSize size = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, [attributedMessage length]), NULL, CGSizeMake([column width], CGFLOAT_MAX), &range);
CFRelease(framesetter);
[attributedMessage release];
return size.height;

任何意见,将不胜感激。现在我正在通过硬编码每行增加一个点(13.0)来解决它,但我想以正确的方式做到这一点。

4

1 回答 1

1

我遇到了类似的问题,发现通过调整约束 rect 我可以获得我想要的输出。

就我而言:

CGSize s1 = CTFramesetterSuggestFrameSizeWithConstraints(self.framesetter, rangeToSize, NULL, CGSizeMake(size.width, CGFLOAT_MAX), NULL);
CGSize s2 = CTFramesetterSuggestFrameSizeWithConstraints(self.framesetter, rangeToSize, NULL, CGSizeMake(size.width, 100000), NULL);

s1以结尾{100, 23}s2{100, 24}(WTF?!) 结尾。

尝试替换CGSizeMake([column width], CGFLOAT_MAX)CGSizeMake([column width], 10000)

于 2012-12-13T08:47:54.613 回答