web-dev-qa-db-fra.com

Comment obtenir la taille de police ou une version en gras de l'instance UIFont

Comment obtenir la taille de police d'une instance UIFont? 

Ou, si quelqu'un peut implémenter cette méthode pour UIFont? 

- (UIFont *)boldFont;
36
iwill

UIFontDescriptor est une classe assez puissante et peut être utilisée pour obtenir la version bold de la police de caractères souhaitée. Il doit être totalement sûr et évolutif, car il ne nécessite que l'utilisation de l'API publique et ne dépend d'aucune modification de chaîne.

Voici le code dans 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) }
    }

}

Voici le code dans 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
14
Rafał Augustyniak

Ceci est une ancienne réponse et ce n'est plus la meilleure solution, s'il vous plaît voir la réponse acceptée à la place.

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

}
38
EmilioPelaez

Pour accéder à la taille de la police depuis votre instance UIFont, utilisez

 @property(nonatomic, readonly) CGFloat pointSize

Il y a plus de propriétés pour indiquer la taille de la police (pour les majuscules, les petites etc ...)

capHeight,xHeight,pointSize 

Utilisez ci-dessous pour accéder à la police en gras 

UIFont* myboldFont = [UIFont boldSystemFontOfSize:11];
25
Jhaliya

Voici le moyen le plus simple de trouver la taille de police

UIFont *anyFont;
//initialization and other stuff here

Maintenant, à un moment donné, vous voulez trouver sa taille

 CGFloat fontSize= [anyFont pointSize];
8
Ali Asad

Utilisez les méthodes NSString + UIKit pour mesurer la taille d’une chaîne avec une police donnée.

L'iPhone considère les polices normales et en gras du même nom comme des polices complètement séparées. Il n'existe donc pas de moyen simple de convertir ces polices. Par exemple, ArialMT et Arial-BoldMT sont considérés par le système d'exploitation comme des polices complètement différentes.

EDIT: J'ai peut-être mal compris votre question. Peut-être recherchez-vous la propriété pointSize de UIFont?

2
titaniumdecoy

Swift 3 version de rafał-augustyniakréponse

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
RolandasR

Vous pouvez vérifier les caractères gras avec Core Text. Utilisez kCTFontBoldTrait.

0
Marty