我正在动态更改NSOutlineView中所有单元格的字体大小。我能够成功地改变实际的字体大小:(夸大效果的字体大小):
id cell = [myOutlineColumn dataCell];
[cell setFont: [NSFont fontWithName: @"Geneva" size:32.0] ];
但是NSOutlineView中行的行高不会改变。细胞都具有先前的高度(17磅) - 但是具有32pt文本。我已经尝试了[myTable tile]和[myTable reloadData],但这并没有重新计算行高。
我看到-noteHeightOfRowsWithIndexesChanged。是否正在加载一个NSIndexSet并调用noteHeightOfRowsWithIndexesChanged获取行自动调整的唯一方法?
答案 0 :(得分:2)
更改字体大小后,您需要在大纲视图上调用-setRowHeight :.例如。 [outlineView setRowHeight:[font pointSize] +2.0]。
为了获得行的最佳高度,这是我在我的应用中所做的事情:
CGFloat KBDefaultLineHeightForFont (NSFont *font, BOOL sizeForTextField)
{
if (font == nil)
font = [NSFont userFontOfSize:0]; // Use default system font if font is nil.
NSLayoutManager *lm = [[NSLayoutManager alloc] init];
if (sizeForTextField)
[lm setTypesetterBehavior:NSTypesetterBehavior_10_2_WithCompatibility];
// On Mountain Lion and above, string drawing is done without using screen fonts, so we must do the same.
if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_7)
[lm setUsesScreenFonts:NO];
CGFloat height = [lm defaultLineHeightForFont:font];
[lm release];
return height;
}
然后:
CGFloat rowHeight = MAX(16.0, KBDefaultLineHeightForFont(ovFont, YES) + 3.0);
[outlineView setRowHeight:rowHeight];
[[[[outlineView tableColumns] objectAtIndex:0] dataCell] setFont:ovFont];