我的Xcode 7,iOS 9目标项目中包含了一个自定义字体。我想让字体等宽。我尝试了这个方法,但没有成功:
let originalFont = UIFont(name: "My Custom Font", size: 18)
let originalFontDescriptor = originalFont!.fontDescriptor()
let fontDescriptorFeatureSettings = [
[
UIFontFeatureTypeIdentifierKey: kNumberSpacingType,
UIFontFeatureSelectorIdentifierKey: kMonospacedNumbersSelector
]
]
let fontDescriptorAttributes = [UIFontDescriptorFeatureSettingsAttribute: fontDescriptorFeatureSettings]
let fontDescriptor = originalFontDescriptor.fontDescriptorByAddingAttributes(fontDescriptorAttributes)
let font = UIFont(descriptor: fontDescriptor, size: 0)
topLabel.font = font
不管有没有上面的代码,标签显示在适当的自定义字体。它只是上面的代码不做任何事情。
3条答案
按热度按时间qgzx9mmu1#
* 我下面的答案是仅将现有字体的数字(不是整个字体)设置为等宽(如果字体支持)*
至少我在寻找使数字等间距时找到了这个线程。所以我希望它会有帮助,虽然它回答了另一个问题。
在Swift 5和iOS14+13上测试后,该功能运行良好:
(只要 “您的字体支持等宽数字功能”。)
然后你可以在任何标签上使用它,就像这样:
(来源:https://blog.usejournal.com/proportional-vs-monospaced-numbers-when-to-use-which-one-in-order-to-avoid-wiggling-labels-e31b1c83e4d0)
4bbkushb2#
您使用的代码没有使字体等宽。
这是调整字体渲染数字在等宽模式。所以所有与此字体的数字将有相同的宽度。
以下是4个标签的示例,1个标签使用自定义字体Docis Light,第2个标签为Docis Light,数字等宽,第3个标签为相同大小的系统字体,第4个标签为系统字体,数字等宽:
如您所见,这种自定义字体已经支持等宽数字特性,无需进行任何调整。
如果您需要使用等宽(不仅仅是数字)字体,您必须使用自定义等宽字体(设计为等宽),或者您可以使用内置的iOS等宽字体,如Courier或门洛(查看http://iosfonts.com/上所有可用的iOS字体)
这是它们在相同场景下的外观:
不管有没有调整,它们已经是等宽的,数字也是等宽的。
我在这里回答了类似的问题,也许,我应该只链接answer而不是图像,但它更直观。
wfauudbj3#
不要忘记导入头文件。希望它能工作。这个解决方案是在Objective-C**中