将粗体添加到UILabel

时间:2013-09-25 17:40:57

标签: ios uilabel bold

我正在尝试弄清楚如何使用Interface Builder中定义的字体来最好地加粗和取消粗体UILabel。

我知道我可以做到这一点,例如:

[myLabel setFont:[UIFont boldSystemFontOfSize:14.0]];

然后我强迫字体与IB中设计的方式有所不同(风格和大小)。

我正在寻找基本上这样做的东西:

[myLabel setBold:TRUE];

或False,视情况而定。

有办法做到这一点吗?

4 个答案:

答案 0 :(得分:2)

不幸的是,UIKit中没有“Bold”的真实概念。如果您尝试将属性字符串的一部分设置为“粗体”,则实际上是在同一字体系列中选择粗体字体。

你可以像这样半开玩笑:

@implementation UIFont (BoldVariant)

- (UIFont *)boldVariant
{
    for (NSString *fontName in [UIFont fontNamesForFamilyName:self.familyName]) {
        if ([fontName hasSuffix:@"-Bold"]) {
            return [UIFont fontWithName:fontName size:self.pointSize];
        }
    }

    // If we couldn't find it, return the same font.
    return self;
}

@end

这假定字体遵循标准命名方案。它还假定fontNamesForFamilyName:返回任何值。我注意到使用系统字体,它返回一个空数组。

答案 1 :(得分:0)

如果你使用的是Helvetica的系统字体,你可以像这样使用label.text粗体:

myLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];

您可以在此网站中找到iOS字体:link

答案 2 :(得分:0)

您想要的方法无论标签中的字体是什么都可以使用,因此它适用于多个标签?

这个怎么样?

使用它的字体属性从标签中获取当前字体。

获取该字体的字体系列名称。

使用UI fontNamesForFamilyName向字体系列询问它的字体列表。

查看您是否可以在返回的字体列表中找到粗体字体。如果是这样,请以当前字体大小请求该字体。如果没有,请使用当前大小的粗体系统字体。 (您可能需要对字符串进行字符串解析,以查找名称中的“粗体”一词。呃。)

不理想,但你应该能够让它发挥作用。

答案 3 :(得分:0)

我能够找到清晰明了的解决方案:

extension UIFont {

    /// Returns same font but with specific `symbolicTraits`.
    func with(symbolicTraits: UIFontDescriptor.SymbolicTraits) -> UIFont {
        let descriptor = fontDescriptor.withSymbolicTraits(symbolicTraits) ?? fontDescriptor
        return UIFont(descriptor: descriptor, size: pointSize)
    }
}

用法:

label.font = label.font.with(symbolicTraits: .traitBold)

或者如果您想混合多个特征:

label.font = label.font.with(symbolicTraits: [.traitBold, .traitItalic) //返回相同的字体(名称和大小),但粗体和斜体。