Fonts xamarin ios使用UIFontFeature的单间隔数字-有人知道为什么不';行不通

Fonts xamarin ios使用UIFontFeature的单间隔数字-有人知道为什么不';行不通,fonts,xamarin.ios,monospace,Fonts,Xamarin.ios,Monospace,我认为,在IOS应用程序中,当使用自定义字体时,可以强制将数字设置为等距。我已经找到了一些例子,并使用了一些编译代码,但我的数字间隔仍然是成比例的。有人让这个工作了吗?如果有,我做错了什么 这是我的密码: UIFont bigNumberFont = UIFont.FromName("Dosis-Light", 60f); var originalDescriptor = bigNumberFont.FontDescriptor; var attributes = new UIFontAttr

我认为,在IOS应用程序中,当使用自定义字体时,可以强制将数字设置为等距。我已经找到了一些例子,并使用了一些编译代码,但我的数字间隔仍然是成比例的。有人让这个工作了吗?如果有,我做错了什么

这是我的密码:

UIFont bigNumberFont = UIFont.FromName("Dosis-Light", 60f);

var originalDescriptor = bigNumberFont.FontDescriptor;
var attributes = new UIFontAttributes(new UIFontFeature(CTFontFeatureNumberSpacing.Selector.MonospacedNumbers),
            new UIFontFeature((CTFontFeatureCharacterAlternatives.Selector)0));

var newDesc = originalDescriptor.CreateWithAttributes(attributes);

UIFont bigNumberMono = UIFont.FromDescriptor(newDesc, 60f);

lbCurrentPaceMinute.Font = bigNumberMono;

我的自定义字体渲染效果很好,但到目前为止,我无法控制数字间距。非常感谢您的任何建议

首先,您的代码没有将字体设置为单间距

您正在调整字体以在单空间模式下渲染数字。所以你所有的数字都有相同的宽度

下面是一个带有4个标签的示例,1个是Docis Light,2个是带有调整的Docis Light,3个是相同大小的系统字体,4个是带有调整的系统字体:

如您所见,Docis Light已经支持开箱即用的单空格数字功能,没有任何调整

如果需要使用单间距字体,则必须使用自定义单间距字体(设计为单间距),或者可以使用内置的iOS单间距字体,如Courier或Menlo(请参阅上的所有可用iOS字体)

在相同的场景中,它们是这样的:

无论是否调整,它们已经是单间距的,并且它们的数字也是单间距的

最后,如果您需要使用单间距数字字体(您的代码就是这样做的),则无需调整字符替换。因此,代码应该是:

public static class UIFontExtensions
{
    public static UIFont MonospacedDigitFont(this UIFont font)
    {
        var originalDescriptor = font.FontDescriptor;
        var monospacedNumbersFeature = new UIFontFeature(CTFontFeatureNumberSpacing.Selector.MonospacedNumbers);
        var attributes = new UIFontAttributes(monospacedNumbersFeature);
        var newDescriptor = originalDescriptor.CreateWithAttributes(attributes);
        return UIFont.FromDescriptor(newDescriptor, font.PointSize);
    }
}

希望这有帮助!我发现深入了解iOS中如何可以和不可以调整字体的细节很有趣。

嗨,ALex,谢谢你花时间回答。我将在章节中回答您的回答。“首先,您的代码没有将字体设置为单间距。您正在调整字体以在单间距模式下呈现数字。因此,您的所有数字都将具有相同的宽度。”我意识到这一点,这就是为什么我明确表示我试图将数字设置为单间距。不过还是要谢谢你的澄清。此外,您还声明Dosis Light字体显示的是单间隔数字,而您提供的图像显示的两个单空间灯光示例彼此相同,且数字明显按比例间隔,而不是单间隔?!最后,我实现了您的代码,不幸的是,我的自定义字体仍然没有等距数字:/@EChristy好吧,当您询问时,我仔细检查了图像,确实我不确定数字1。我去查一下。关于您的自定义字体,您使用哪种字体?我想可能对字体本身有一些依赖。