2012-09-04 14 views
1

我正在嘗試使用CTFramesetterSuggestFrameSizeWithConstraints()和tableview:heightOfRow :,提供帶有NSTableView的單元屬性的屬性字符串。的問題是,它的返回中的13.0倍數的值(13.0 1線,26.0兩行,等等)的,而不是14.0預期的倍數(其對應的爲[的tableView rowHeight的]。CTFramesetterSuggestFrameSizeWithConstraints()在表視圖中每行偏離1點

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),但我想這樣做是正確的方式。

回答

1

我遇到了類似的問題,並且發現通過調整約束矩形我可以得到我想要的輸出。

對我而言:

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)