我想创建一个黑色(比粗体重)和斜体的UIFont,没有硬编码任何字体名称或任何东西。
我所有的尝试都失败了。您可以通过UIFont.systemFont(ofSize: 15.0,weight:.black),然后应用斜体符号特征来完成此操作,但这显然只适用于系统字体。(例如,Helvetica和Avenir都有各种字体粗细,其中包括斜体变体。)
这是我的尝试,但它只有一个普通的粗细斜体字体,而不是黑色。
var fontAttributes: [UIFontDescriptor.AttributeName: Any] = [:]
var fontTraits: [UIFontDescriptor.TraitKey: Any] = [:]
fontTraits[.weight] = UIFont.Weight.black // Also hardcoding a number like 0.6 does not work
fontAttributes[.traits] = fontTraits
let descriptor1 = UIFontDescriptor(fontAttributes: fontAttributes)
let descriptor2 = descriptor1.withSymbolicTraits(.traitItalic)!
let font = UIFont(descriptor: descriptor2, size: 19.0)
label.font = font // Sad trombone music. It's just 'regular italic'.发布于 2021-10-27 04:34:18
我尝试了几种不同的路线,但这看起来很有希望。看起来字体名称是必须保留的。它似乎也能从现有的字体中找到“最佳”匹配。
改编自https://github.com/wireapp/wire-ios/blob/develop/Wire-iOS/Sources/Helpers/UIFont%2BWeight.swift
import UIKit
public extension UIFont {
/// Returns a font object that is the same as the receiver but which has the specified weight and symbolic traits
func with(weight: Weight, symbolicTraits: UIFontDescriptor.SymbolicTraits) -> UIFont {
var mergedsymbolicTraits = fontDescriptor.symbolicTraits
mergedsymbolicTraits.formUnion(symbolicTraits)
var traits = fontDescriptor.fontAttributes[.traits] as? [String: Any] ?? [:]
traits[kCTFontWeightTrait as String] = weight
traits[kCTFontSymbolicTrait as String] = mergedsymbolicTraits.rawValue
var fontAttributes: [UIFontDescriptor.AttributeName: Any] = [:]
fontAttributes[.family] = familyName
fontAttributes[.traits] = traits
return UIFont(descriptor: UIFontDescriptor(fontAttributes: fontAttributes), size: pointSize)
}
}https://stackoverflow.com/questions/69731486
复制相似问题