Как получить размер шрифта или жирную версию экземпляра UIFont - PullRequest
37 голосов
/ 01 июля 2011

Как получить размер шрифта экземпляра UIFont?

Или, если кто-то может реализовать этот метод для UIFont?

- (UIFont *)boldFont;

Ответы [ 7 ]

38 голосов
/ 01 июля 2011

Это старый ответ, и он больше не является лучшим решением, см. Принятый ответ вместо этого.

-(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;

}
25 голосов
/ 01 июля 2011

Чтобы получить доступ к размеру шрифта из вашего экземпляра UIFont, используйте

 @property(nonatomic, readonly) CGFloat pointSize

Есть еще свойство, позволяющее определить размер шрифта (для шапки, маленького размера и т. Д.)

capHeight,xHeight,pointSize 

Используйте ниже для доступа к жирному шрифту

UIFont* myboldFont = [UIFont boldSystemFontOfSize:11];
15 голосов
/ 19 января 2016

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) }
    }

}

Вот код в target-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
8 голосов
/ 29 октября 2014

Вот самый простой способ найти размер шрифта

UIFont *anyFont;
//initialization and other stuff here

Теперь в какой-то момент вы хотите найти его размер

 CGFloat fontSize= [anyFont pointSize];
2 голосов
/ 01 июля 2011

Используйте методы NSString + UIKit для измерения размера строки с определенным шрифтом.

iPhone обрабатывает обычные и полужирные шрифты с одинаковыми именами как совершенно разные шрифты, икак таковой нет простого способа конвертировать между ними.Например, ArialMT и Arial-BoldMT считаются ОС совершенно разными шрифтами.

РЕДАКТИРОВАТЬ: Я, возможно, неправильно понял ваш вопрос.Возможно, вы ищете свойство pointSize UIFont?

0 голосов
/ 27 января 2017

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)
    }

}
0 голосов
/ 29 июля 2012

Вы можете проверить жирным шрифтом с Core Text. Используйте kCTFontBoldTrait.

...