如何在UILabel中使字符宽度相等

时间:2016-07-25 05:40:22

标签: ios uilabel

使用UILabel时遇到问题。

enter image description here

我这里有两个标签(上面的图片),它们有相同的字体和相等的宽度,textAlignment都是左边的,它们都有10个字符,但每个字符都有不同的宽度,所以它不能一个一个地对齐,我正在尝试动态添加间距,但我没有这样做,所以我该如何解决?非常感谢〜

3 个答案:

答案 0 :(得分:7)

如果您要定位iOS 7 +,则无需使用等宽字体!

来自UseYourLoaf blog

let bodyFontDescriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: UIFontTextStyle.body)
let bodyMonospacedNumbersFontDescriptor = bodyFontDescriptor.addingAttributes(
    [
        UIFontDescriptorFeatureSettingsAttribute: [
            [
                UIFontFeatureTypeIdentifierKey: kNumberSpacingType,
                UIFontFeatureSelectorIdentifierKey: kMonospacedNumbersSelector
            ]
        ]
    ])

let bodyMonospacedNumbersFont = UIFont(descriptor: bodyMonospacedNumbersFontDescriptor, size: 16.0)

myLabel.font = bodyMonospacedNumbersFont

答案 1 :(得分:2)

它失败的原因是你使用的是比例字体,这意味着:字符将占用单独的宽度。 i只会产生m的摩擦。

使用等宽字体,而不是所有字符都具有相同的宽度。

label.font = UIFont(name:"Courier", size: 17)

出于同样的原因,Courier和其他等宽字体用于代码编辑器。

答案 2 :(得分:0)

您可以使用NSAttributedString调整字母间距。

在Objective-C中:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"111111111"];
[attributedString addAttribute:NSKernAttributeName
                         value:@(4)
                         range:NSMakeRange(0, 9)];

self.label.attributedText = attributedString;

在Swift中:

let attributedString = NSMutableAttributedString(string: "000000000")
attributedString.addAttribute(NSKernAttributeName, value: CGFloat(1.5), range: NSRange(location: 0, length: 9))

label.attributedText = attributedString

对于特定,您可以更改1套4和其他1.5的NSKernAttributeName值。

OutPut会像:

enter image description here