我的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
无论有无上述代码,标签都会以适当的自定义字体显示。它只是在代码之上并没有做任何事情。
答案 0 :(得分:0)
您使用的代码不是使字体等宽。
调整字体以在等宽模式下呈现数字。所以这个字体数字都有相同的宽度。
下面是一个带有4个标签的示例,1是使用自定义字体Docis Light,第2个是带有等宽数字的Docis Light,第3个是相同大小的系统字体,第4个是带有等宽数字的系统字体:
如您所见,此自定义字体已经支持开箱即用的等宽数字功能,无需调整。
如果您需要使用等宽字体(不仅仅是数字)字体,您必须使用自定义等宽字体(设计为等宽字体),或者您可以使用内置的iOS等宽字体,如Courier或Menlo(查看所有可用的iOS字体)在http://iosfonts.com/)
这是他们在相同情况下的样子:
无论有没有调整,它们都是等宽的,数字也是等宽的。
我在这里回答了类似的问题,可能,我应该只链接answer而不是图片,但它更直观。
答案 1 :(得分:0)
不要忘记导入标题文件。希望它会奏效。此解决方案位于 Objective-C
中#import <CoreTextArcView.h>
UIFont *const existingFont = [UIFont preferredFontForTextStyle: UIFontTextStyleBody];
UIFontDescriptor *const existingDescriptor = [existingFont fontDescriptor];
NSDictionary *const fontAttributes = @{
UIFontFeatureTypeIdentifierKey
UIFontDescriptorFeatureSettingsAttribute: @[
@{
UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
UIFontFeatureSelectorIdentifierKey: @(kMonospacedNumbersSelector)
}]
};
UIFontDescriptor *const monospacedDescriptor = [existingDescriptor fontDescriptorByAddingAttributes: fontAttributes];
UIFont *const proportionalFont = [UIFont fontWithDescriptor: monospacedDescriptor size: [existingFont pointSize]];
答案 2 :(得分:0)
至少我在寻找找到该线程时使数字等距。因此,尽管它回答了另一个问题,但我希望它会有所帮助。
extension UIFont {
var monospacedDigitFont: UIFont {
let oldFontDescriptor = fontDescriptor
let newFontDescriptor = oldFontDescriptor.monospacedDigitFontDescriptor
return UIFont(descriptor: newFontDescriptor, size: 0)
}
}
private extension UIFontDescriptor {
var monospacedDigitFontDescriptor: UIFontDescriptor {
let fontDescriptorFeatureSettings = [[UIFontDescriptor.FeatureKey.featureIdentifier: kNumberSpacingType, UIFontDescriptor.FeatureKey.typeIdentifier: kMonospacedNumbersSelector]]
let fontDescriptorAttributes = [UIFontDescriptor.AttributeName.featureSettings: fontDescriptorFeatureSettings]
let fontDescriptor = self.addingAttributes(fontDescriptorAttributes)
return fontDescriptor
}
}
然后您可以在任何这样的标签上使用它:
/// Label with monospacing activated
myLabel.font = myLabel.font.monospacedDigitFontDescriptor
/// Label with monospacing not activated (default is proportional spacing)
myLabel.font = myLabel.font