Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何将NSTableView列设置为使用等距数字? E-CabPad引入旧金山系统字体,默认为比例数字。_Cocoa_Fonts_Nstableview_Osx Elcapitan - Fatal编程技术网

Cocoa 如何将NSTableView列设置为使用等距数字? E-CabPad引入旧金山系统字体,默认为比例数字。

Cocoa 如何将NSTableView列设置为使用等距数字? E-CabPad引入旧金山系统字体,默认为比例数字。,cocoa,fonts,nstableview,osx-elcapitan,Cocoa,Fonts,Nstableview,Osx Elcapitan,这使得表列中的数字看起来参差不齐,难以比较: 我想为字体启用固定宽度的数字选项,但请继续使用默认的系统字体,并与早期版本的OS X保持向后兼容性 在界面生成器中,选择字体>字体面板>排版>等距数字不会影响字体(XIB文件保持不变) 在OSX表格视图列中设置单间隔数字的正确方法是什么?(我怀疑IB不适用于此,所以编程解决方案也可以)。根据我的经验,“字体面板”功能没有很好的定义,我通常在处理XIB或故事板时忽略它 工作方法是返回文本字段单元格属性检查器中的“字体”属性,然后从字体下拉菜单中选择

这使得表列中的数字看起来参差不齐,难以比较:

我想为字体启用固定宽度的数字选项,但请继续使用默认的系统字体,并与早期版本的OS X保持向后兼容性

在界面生成器中,选择字体>字体面板>排版>等距数字不会影响字体(XIB文件保持不变)

在OSX表格视图列中设置单间隔数字的正确方法是什么?(我怀疑IB不适用于此,所以编程解决方案也可以)。

根据我的经验,“字体面板”功能没有很好的定义,我通常在处理XIB或故事板时忽略它

工作方法是返回文本字段单元格属性检查器中的“字体”属性,然后从字体下拉菜单中选择“用户固定间距”(该选项应自动默认为大小11)

如果字体大小增加一点,它会神奇地切换到Monaco(默认的固定宽度字体)。

将以下内容视为伪代码、快速完成、未经过全面测试等

给定一个
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适当地为系统,使用摩纳哥并不能解决这个问题。