The following code allows to create a font with different weights.
func makeFont(weight: CGFloat, size: CGFloat) -> UIFont {
var attributesDict = [String: Any]()
attributesDict["Weight"] = weight
/* Rubik-Light - is a variable font */
let fontDescriptor = UIFontDescriptor(
fontAttributes: [
UIFontDescriptor.AttributeName.name : "Rubik-Light",
kCTFontVariationAttribute as UIFontDescriptor.AttributeName : attributesDict
]
)
return UIFont(descriptor: fontDescriptor, size: size)
}
It works fine on ios 13 and below, but doesn't work on iOS 14. Is there any solution?
Solved. iOS 14 expects attribute ID instead of its name ("Weight").
So, attributeDict should look like this:
var attributesDict = [NSNumber: Any]()
attributesDict[NSNumber(value: 2003265652)] = weight
Attribute ID can be obtained as follows:
let variationAxes = (CTFontCopyVariationAxes(ctFont)! as Array)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With