我认为现在可以在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;
我的自定义字体渲染得很好,但我还无法控制数字间距。任何建议都非常感谢!
答案 0 :(得分:1)
首先,您的代码不是使字体等宽。
您正在调整字体以在等宽模式下呈现数字。所以你的所有数字都有相同的宽度。
以下是4个标签的示例,1个是Docis Light,第2个是带有调整的Docis Light,第3个是相同大小的系统字体,第4个是带有调整的系统字体:
如您所见,Docis Light已经开始支持等宽数字功能,无需调整。
如果您需要使用等宽字体,则必须使用自定义等宽字体(设计为等宽字体),或者您可以使用内置的iOS等宽字体(如Courier或Menlo)(请参阅{{3}处的所有可用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中调整字体。