webentwicklung-frage-antwort-db.com.de

So erhalten Sie die Schriftgröße oder eine fette Version der UIFont-Instanz

Wie erhalte ich die Schriftgröße einer UIFont-Instanz? 

Oder wenn jemand diese Methode für UIFont implementieren kann? 

- (UIFont *)boldFont;
36
iwill

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
14

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;

}
38
EmilioPelaez

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];
25
Jhaliya

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];
8
Ali Asad

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?

2
titaniumdecoy

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

}
0
RolandasR

Sie können mit Core Text auf Fettdruck prüfen. Verwenden Sie kCTFontBoldTrait.

0
Marty