about 6 years ago

写一个Mac上微博客户端的关键就是计算NSTableView中的每一个Row的高度,算高度的方法挺多,我在CocoaBuilder上找到一个很简单的解决方法。

-(CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row 
{ 
    NSString *text = [self populateText:row]; 
    NSMutableAttributedString *rString = [[NSMutableAttributedString alloc] initWithString:text]; 
    [rString addAttribute:NSFontAttributeName value:[NSFont userFontOfSize:13] range: NSMakeRange(0, rString.length)]; 
    float rows = ceilf(rString.size.width / 360.0f); 
    return rString.size.height * rows + 40 > 68 ? rString.size.height * rows + 40 : 68; 
}

使用NSAttributedString,可以方便的计算出这个高度,先设置好字体,字号,再通过

ceilf(rString.size.width / 360.0f)

计算出需要几行,再乘每行的高度。

rString.size.height * rows + 40 > 68 ? rString.size.height * rows + 40 : 68;

40是为其他的元素留出足够的空间,68是当内容很短,只有一行时,所需要的最小的高度,这个和你的行的元素有关的。

← 删除Lion/Mountain Lion中的某国安全证书 Cocoa解析新浪微博的日期 →