8

Ich habe eine Anfrage von einem Kunden, eine bestimmte Schriftart in einem iOS 7-Projekt zu verwenden, da es medieval numbers hat.Verwenden Sie mittelalterliche (Kleinbuchstaben, non-lining) Zahlen

Gibt es eine Möglichkeit, diese Nummern für einen NSAtributedString zu aktivieren? Als Voreinstellung werden Zeilennummern verwendet, die in der Schriftart enthalten sind.


Hier ist ein Beispiel. Beide Linien haben die gleiche Schriftart ohne Variante (Regular), einmal mit aktivierten mittelalterlichen Zahlen, die zweite mit den Standard-Lining-Nummern.

enter image description here

+1

Was Sie von activate meine ich? Ändert sich die Schrift nicht? – Sulthan

+0

Die Schriftart hat 2 Zahlenarten. Der Futterstil ist der Standard. @Sulthan – vikingosegundo

+1

@Sultan, vielleicht wird das Bild, das ich hinzugefügt habe, die Dinge klarer machen. – vikingosegundo

Antwort

11

Diese heißen Kleinbuchstaben und können mit UIFontDescriptor eingeschaltet werden.

Zuerst müssen Sie Core für einige Konstanten importieren:

#import <CoreText/SFNTLayoutTypes.h> 
or 
@import CoreText.SFNTLayoutTypes; 

Dann erstellen Sie Schriftart mit Fontdeskriptors. Hier verwende ich Georgia Familie:

NSDictionary *lowercaseNumbers = @{ 
            UIFontFeatureTypeIdentifierKey: @(kNumberCaseType), 
            UIFontFeatureSelectorIdentifierKey: @(kLowerCaseNumbersSelector), 
            }; 
UIFontDescriptor *descriptor = [[UIFontDescriptor alloc] initWithFontAttributes: 
           @{ 
            UIFontDescriptorFamilyAttribute: @"Georgia", 
            UIFontDescriptorFeatureSettingsAttribute:@[ lowercaseNumbers ], 
            }]; 
UIFont *font = [UIFont fontWithDescriptor:descriptor size:15]; 

Ergebnis:
enter image description here

Edit: Wie @ Random832 wies darauf hin, Georgia hat nur Klein Zahlen, so das Ergebnis ist nicht relevant. @vikingosegundo bestätigt, dass dieser Code auf unterstützten Schriftarten funktioniert. Vielen Dank.

enter image description here

Die obere Zeile wurde mit

mit

UIFont *font = [UIFont fontWithName:@"DIN Next LT Pro" size:12]; 
if (font) 
    label.font = font; 

die zweite Zeile erzeugt

NSDictionary *lowercaseNumbers = @{ UIFontFeatureTypeIdentifierKey:@(kNumberCaseType), UIFontFeatureSelectorIdentifierKey: @(kLowerCaseNumbersSelector)}; 
UIFontDescriptor *descriptor = [[UIFontDescriptor alloc] initWithFontAttributes: 
           @{UIFontDescriptorFamilyAttribute: @"DIN Next LT Pro",UIFontDescriptorFeatureSettingsAttribute:@[ lowercaseNumbers ]}]; 
UIFont *font = [UIFont fontWithDescriptor:descriptor size:12]; 
if (font) 
    label.font = font; 
+0

großartig! Danke vielmals! – vikingosegundo

+0

Kein Problem. Es lohnt sich, in _SFNTLayoutTypes.h_ zu suchen, da Sie vielleicht einige interessante Funktionen finden, wie Proportionalnummern oder alternative Interpunktion. – Tricertops

+2

Ich denke, das größte Problem ist der Wortlaut. Typografie hat so viele Vokabeln, die ich nicht kenne. sogar in meiner eigenen Muttersprache. – vikingosegundo

Verwandte Themen