Wie erhalte ich die Schriftgröße einer UIFont-Instanz?
Oder wenn jemand diese Methode für UIFont implementieren kann?
- (UIFont *)boldFont;
UIFontDescriptor
ist eine ziemlich leistungsfähige Klasse und kann verwendet werden, um die fette Version der gewünschten Schriftart abzurufen. Es sollte absolut sicher und zukunftssicher sein, da nur die Verwendung einer öffentlichen API erforderlich ist und keine Änderung der Zeichenfolge erforderlich ist.
Hier ist der Code in 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) }
}
}
Hier ist der Code in Ziel-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
Dies ist eine alte Antwort und es ist nicht mehr die beste Lösung. Sehen Sie sich stattdessen die akzeptierte Antwort an.
-(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;
}
Um auf die Schriftgröße von Ihrer UIFont-Instanz zuzugreifen, verwenden Sie
@property(nonatomic, readonly) CGFloat pointSize
Es gibt mehr Eigenschaften, um die Schriftgröße zu bestimmen (für Mütze, klein usw.).
capHeight,xHeight,pointSize
Verwenden Sie unten, um auf die fette Schrift zuzugreifen
UIFont* myboldFont = [UIFont boldSystemFontOfSize:11];
So können Sie die Schriftgröße am einfachsten ermitteln
UIFont *anyFont;
//initialization and other stuff here
Nun möchten Sie irgendwann die Größe finden
CGFloat fontSize= [anyFont pointSize];
Verwenden Sie die Methoden NSString + UIKit , um die Größe einer Zeichenfolge mit einer bestimmten Schriftart zu messen.
Das iPhone behandelt die normalen und fetten Schriftarten desselben Namens als vollständig getrennte Schriftarten. Daher gibt es keine einfache Möglichkeit, diese zu konvertieren. Zum Beispiel werden ArialMT und Arial-BoldMT vom Betriebssystem als völlig unterschiedliche Schriftarten betrachtet.
EDIT: Ich habe Ihre Frage möglicherweise falsch verstanden. Vielleicht suchen Sie nach der pointSize - Eigenschaft von UIFont?
Swift 3-Version von rafał-augustyniakAntwort
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)
}
}
Sie können mit Core Text auf Fettdruck prüfen. Verwenden Sie kCTFontBoldTrait
.