【问题标题】:xamarin ios monospaced Numbers using UIFontFeature - does anyone know why this doesn't work使用 UIFontFeature 的 xamarin ios 等宽数字 - 有谁知道为什么这不起作用
【发布时间】:2016-10-12 14:06:20
【问题描述】:

我认为现在可以在 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;

我的自定义字体渲染良好,但我无法控制数字间距。任何建议都非常感谢!

【问题讨论】:

    标签: fonts xamarin.ios monospace


    【解决方案1】:

    首先,您的代码没有使字体等宽。

    您正在调整字体以在等宽模式下呈现数字。所以你所有的数字都会有相同的宽度。

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

    如您所见,Docis Light 已经支持开箱即用的等宽数字功能。

    如果您需要使用等宽字体,您必须使用自定义等宽字体(设计为等宽字体)或者您可以使用内置的 iOS 等宽字体,例如 Courier 或 Menlo(查看所有可用的 iOS 字体http://iosfonts.com/

    这是它们在相同场景下的样子:

    无论是否调整,它们已经是等宽的,并且它们的数字也是等宽的。

    最后,如果您需要等宽数字字体(您的代码所做的),则无需调整字符替代。所以代码是:

    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。我会继续检查它。关于您的自定义字体,您使用的是哪种字体?我想可能对字体本身有一些依赖。
    猜你喜欢
    • 1970-01-01
    • 2015-07-06
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多