gpt4 book ai didi

objective-c - 在整个 NSTableView/NSOutlineView 的字体大小后动态改变行高

转载 作者:行者123 更新时间:2023-12-03 17:03:37 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

更改字体大小后,您需要在大纲 View 上调用 -setRowHeight: 。例如。 [outlineView setRowHeight:[字体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];

关于objective-c - 在整个 NSTableView/NSOutlineView 的字体大小后动态改变行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com