38

如何获取 UIFont 实例的字体大小?

或者,如果有人可以为 UIFont 实现这个方法?

- (UIFont *)boldFont;
4

7 回答 7

38

这是一个旧答案,它不再是最佳解决方案,请改为查看已接受的答案。

-(UIFont *)boldFont{

//First get the name of the font (unnecessary, but used for clarity)
NSString *fontName = self.fontName;

//Some fonts having -Regular on their names. so we have to remove that before append -Bold / -BoldMT
fontName = [[fontName componentsSeparatedByString:@"-"] firstObject];

//Then append "-Bold" to it.
NSString *boldFontName = [fontName stringByAppendingString:@"-Bold"];

//Then see if it returns a valid font
UIFont *boldFont = [UIFont fontWithName:boldFontName size:self.pointSize];

//If it's valid, return it
if(boldFont) return boldFont;

//Seems like in some cases, you have to append "-BoldMT"
boldFontName = [fontName stringByAppendingString:@"-BoldMT"];
boldFont = [UIFont fontWithName:boldFontName size:self.pointSize];

//Here you can check if it was successful, if it wasn't, then you can throw an exception or something.
return boldFont;

}
于 2011-07-01T06:15:25.930 回答
25

要从 UIFont 实例访问字体大小,请使用

 @property(nonatomic, readonly) CGFloat pointSize

还有更多属性可以告诉字体大小(对于大写,小等......)

capHeight,xHeight,pointSize 

使用下面来访问粗体字体

UIFont* myboldFont = [UIFont boldSystemFontOfSize:11];
于 2011-07-01T05:59:51.073 回答
16

UIFontDescriptor是非常强大的类,可用于获取所需字体的粗体版本。它应该是完全安全且面向未来的,因为它只需要使用公共 API 并且不依赖于任何字符串修改。

这是 Swift 3 中的代码:

extension UIFont {

    func bold() -> UIFont? {
         let fontDescriptorSymbolicTraits: UIFontDescriptorSymbolicTraits = [fontDescriptor.symbolicTraits, .traitBold]
         let bondFontDescriptor = fontDescriptor.withSymbolicTraits(fontDescriptorSymbolicTraits)
         return bondFontDescriptor.flatMap { UIFont(descriptor: $0, size: pointSize) }
    }

}

这是objective-c中的代码:

@implementation UIFont (RABoldFont)

- (UIFont *)ra_boldFont
{
    UIFontDescriptor *fontDescriptor = [self fontDescriptor];
    UIFontDescriptorSymbolicTraits traits = fontDescriptor.symbolicTraits;
    traits = traits | UIFontDescriptorTraitBold;
    UIFontDescriptor *boldFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:traits];
    return [UIFont fontWithDescriptor:boldFontDescriptor size:self.pointSize];
}

@end
于 2016-01-18T23:27:06.107 回答
8

这是查找字体大小的最简单方法

UIFont *anyFont;
//initialization and other stuff here

现在在某个时候你想找到它的大小

 CGFloat fontSize= [anyFont pointSize];
于 2014-10-29T07:35:48.217 回答
2

使用NSString+UIKit方法来测量具有特定字体的字符串的大小。

iPhone 将同名的普通字体和粗体字体视为完全独立的字体,因此没有简单的方法可以在它们之间进行转换。例如,操作系统认为 ArialMT 和 Arial-BoldMT 是完全不同的字体。

编辑:我可能误解了你的问题。也许您正在寻找UIFont 的pointSize属性?

于 2011-07-01T05:58:24.157 回答
0

您可以使用 Core Text 检查粗体。使用kCTFontBoldTrait.

于 2012-07-29T05:37:40.903 回答
0

Swift 3 版本的rafał-augustyniak 答案

extension UIFont {


    func boldFont() -> UIFont? {
        let fontDescriptor = self.fontDescriptor
        let fontDescriptorSymbolicTraits: UIFontDescriptorSymbolicTraits = [ fontDescriptor.symbolicTraits, .traitBold ]

        guard let boldFontDesc = fontDescriptor.withSymbolicTraits(fontDescriptorSymbolicTraits) else {
            return nil
        }

        return UIFont(descriptor: boldFontDesc, size: pointSize)
    }

}
于 2017-01-27T10:32:54.740 回答