2016-04-15 11 views
-1

Ich versuche, eine Schriftart mit Kapitälchen zu verwenden. Ich fand eine UIFont-Erweiterung auf der Website eines Kerls, die behauptete, es würde Small Caps machen, aber leider kein Glück. Irgendwelche Ideen?Wie verwenden Sie kleine Caps?

extension UIFont { 

    func smallCapsFontVariant(smallCapsForUppercase: Bool = true) -> UIFont { 
    var features = [ 
    [UIFontFeatureTypeIdentifierKey: kLowerCaseType, 
    UIFontFeatureSelectorIdentifierKey: kLowerCaseSmallCapsSelector] 
] 

if smallCapsForUppercase { 
    features.append([UIFontFeatureTypeIdentifierKey: kUpperCaseType, 
    UIFontFeatureSelectorIdentifierKey: kUpperCaseSmallCapsSelector]) 
} 

let smallCapsFontDescriptor = fontDescriptor().fontDescriptorByAddingAttributes([ 
    UIFontDescriptorFeatureSettingsAttribute : features 
    ]) 

return UIFont(descriptor: smallCapsFontDescriptor, size: 0d) 
} 
+5

@LeoNatan Ich verstehe das, aber Benutzer können Fragen mit der Sprache * sie wollen eine Antwort in *. Die Frage muss nicht um die markierte Sprache gehen. Zum Beispiel weiß ich, dass das OP in Objective-C keine Antwort will. – Moritz

Antwort

2

Das Problem ist, dass nur sehr wenige Schriftarten eine Kapitälchen-Variante haben. Wenn Sie eines dieser wenigen nicht verwenden, erhalten Sie keine Kapitälchen. Sie können nicht auf magische Weise eine Funktion erstellen, die nicht da ist ...

Hier Code ist, der die Kapitälchen-Variante von Didot greift:

let desc = UIFontDescriptor(name:"Didot", size:18) 
    let d = [ 
     UIFontFeatureTypeIdentifierKey:kLetterCaseType, 
     UIFontFeatureSelectorIdentifierKey:kSmallCapsSelector 
    ] 
    let desc2 = desc.fontDescriptorByAddingAttributes(
     [UIFontDescriptorFeatureSettingsAttribute:[d]] 
    ) 
    let f = UIFont(descriptor: desc2, size: 0) 

Jetzt f ist die Kapitälchen-Variante von Didot, und Sie kann es in Ihrer Schnittstelle verwenden.

Wenn die von Ihnen verwendete Schriftart nicht Didot ist, ersetzen Sie sie in diesem Code. aber seien Sie sehr sicher, damit zu beginnen, dass Ihre Schriftart eine kleine Kappenvariante hat, oder das wird nicht funktionieren.

+0

Die Ablehnung dieser Antwort scheint albern, da sie nachweislich korrekt ist. – matt

+0

Dies scheint nicht mehr zu funktionieren. Möglicherweise ein iOS 9 Problem? – ntesler

+0

@ntesler funktioniert gut in iOS 9, 10, was auch immer. Herunterladbares Arbeitsprojekt hier: https://github.com/matnteub/Programming-iOS-Book-Examples/blob/master/bk2ch10p499fontDescriptor2/ch23p670font1dynamicType/ViewController.swift – matt