Cocoa 如何将NSTableView列设置为使用等距数字? E-CabPad引入旧金山系统字体,默认为比例数字。
这使得表列中的数字看起来参差不齐,难以比较: 我想为字体启用固定宽度的数字选项,但请继续使用默认的系统字体,并与早期版本的OS X保持向后兼容性 在界面生成器中,选择字体>字体面板>排版>等距数字不会影响字体(XIB文件保持不变) 在OSX表格视图列中设置单间隔数字的正确方法是什么?(我怀疑IB不适用于此,所以编程解决方案也可以)。根据我的经验,“字体面板”功能没有很好的定义,我通常在处理XIB或故事板时忽略它 工作方法是返回文本字段单元格属性检查器中的“字体”属性,然后从字体下拉菜单中选择“用户固定间距”(该选项应自动默认为大小11) 如果字体大小增加一点,它会神奇地切换到Monaco(默认的固定宽度字体)。将以下内容视为伪代码、快速完成、未经过全面测试等 给定一个Cocoa 如何将NSTableView列设置为使用等距数字? E-CabPad引入旧金山系统字体,默认为比例数字。,cocoa,fonts,nstableview,osx-elcapitan,Cocoa,Fonts,Nstableview,Osx Elcapitan,这使得表列中的数字看起来参差不齐,难以比较: 我想为字体启用固定宽度的数字选项,但请继续使用默认的系统字体,并与早期版本的OS X保持向后兼容性 在界面生成器中,选择字体>字体面板>排版>等距数字不会影响字体(XIB文件保持不变) 在OSX表格视图列中设置单间隔数字的正确方法是什么?(我怀疑IB不适用于此,所以编程解决方案也可以)。根据我的经验,“字体面板”功能没有很好的定义,我通常在处理XIB或故事板时忽略它 工作方法是返回文本字段单元格属性检查器中的“字体”属性,然后从字体下拉菜单中选择
NSFont
表示以单间隔数字为特征的字体,以下方法将生成另一个选中该特征的NSFont
:
- (NSFont *) newMonospaceNumbersFont:(NSFont *)font
{
CTFontDescriptorRef origDesc = CTFontCopyFontDescriptor((__bridge CTFontRef)font);
CTFontDescriptorRef monoDesc = CTFontDescriptorCreateCopyWithFeature(origDesc, (__bridge CFNumberRef)@(kNumberSpacingType), (__bridge CFNumberRef)@(kMonospacedNumbersSelector));
CFRelease(origDesc);
CTFontRef monoFont = CTFontCreateWithFontDescriptor(monoDesc, font.pointSize, NULL);
CFRelease(monoDesc);
return (__bridge_transfer NSFont *)monoFont;
}
例如,您可以使用它获取UI元素的当前字体,并将其转换为带有单空格数字的字体
嗯
Swift的变体
假设res
是NSTextField
,其中包含要显示的数字:
let origDesc = CTFontCopyFontDescriptor(res.font!)
let monoDesc = CTFontDescriptorCreateCopyWithFeature(origDesc, kNumberSpacingType, kMonospacedNumbersSelector)
let monoFont = CTFontCreateWithFontDescriptor(monoDesc, res.font!.pointSize, nil)
res.font = monoFont
只要在可用时使用
+[NSFont monospacedDigitSystemFontOfSize:weight:
。它在10.11中是新的,但在NSFont
文档中仍然没有。它在标题中,并在2015年WWDC视频中进行了讨论。比如说:
if ([NSFont respondsToSelector:@selector(monospacedDigitSystemFontOfSize:weight:)])
textField.font = [NSFont monospacedDigitSystemFontOfSize:textField.font.pointSize weight:NSFontWeightRegular];
这里有一个快速扩展,它为您提供了一种高易读性的单间距数字字体
extension NSFont {
var legibleNumbersVariant: NSFont {
let features = [
[NSFontFeatureTypeIdentifierKey: kNumberSpacingType,
NSFontFeatureSelectorIdentifierKey: kMonospacedNumbersSelector],
[NSFontFeatureTypeIdentifierKey: kStylisticAlternativesType,
NSFontFeatureSelectorIdentifierKey: kStylisticAltSixOnSelector]
]
let descriptor = fontDescriptor.addingAttributes([NSFontFeatureSettingsAttribute: features])
return NSFont(descriptor: descriptor, size: pointSize) ?? self
}
}
您是如何填充这些单元格的?绑定或您使用NSTAVELVIEW DATABASECE(例如)@ MichaelDautermann,我使用绑定与NSArrayControllerI认为Johan的答案应该被接受,因为它不使用私有API。我正在寻找一个解决方案,使用旧金山(单数字选项)/ HelviTa/ LuxDig-GAND适当地为系统,使用摩纳哥并不能解决这个问题。