1

NSOutlineView 内のすべてのセルのフォント サイズを動的に変更しています。実際のフォント サイズを正常に変更できます: (効果のために誇張されたフォント サイズ):

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

ただし、NSOutlineView の行の高さは変わりません。セルはすべて以前の高さ (17 ポイント) ですが、テキストは 32 ポイントです。[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 に答える