Comment obtenir la taille de police d'une instance UIFont?
Ou, si quelqu'un peut implémenter cette méthode pour UIFont?
- (UIFont *)boldFont;
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
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;
}
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];
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];
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?
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)
}
}
Vous pouvez vérifier les caractères gras avec Core Text. Utilisez kCTFontBoldTrait
.