1

我正在动态更改 NSOutlineView 中所有单元格的字体大小。我能够成功更改实际字体大小:(字体大小为效果而夸大):

id cell = [myOutlineColumn dataCell];
[cell setFont: [NSFont fontWithName: @"Geneva" size:32.0] ];

但是 NSOutlineView 中行的行高不会改变。单元格都具有先前的高度(17 pt)——但文本为 32pt。我试过 [myTable tile] 和 [myTable reloadData] 但这并没有重新计算行高。

我看到了-noteHeightOfRowsWithIndexesChanged。加载 NSIndexSet 并调用 noteHeightOfRowsWithIndexesChanged 是自动调整行的唯一方法吗?

4

1 回答 1

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];
于 2013-06-13T20:11:12.663 回答