我正在尝试弄清楚如何使用Interface Builder中定义的字体来最好地加粗和取消粗体UILabel。
我知道我可以做到这一点,例如:
[myLabel setFont:[UIFont boldSystemFontOfSize:14.0]];
然后我强迫字体与IB中设计的方式有所不同(风格和大小)。
我正在寻找基本上这样做的东西:
[myLabel setBold:TRUE];
或False,视情况而定。
有办法做到这一点吗?
答案 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)
//返回相同的字体(名称和大小),但粗体和斜体。