ios - 如何创建斜体和黑色(粗细)UIFont 对象?
问题描述
我想创建一个既是黑色(比粗体重)又是斜体的 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'.
解决方案
我尝试了一些不同的路线,但这看起来很有希望。看起来字体名称是必不可少的。它似乎还从现有字体中找到了“最佳”匹配。
改编自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)
}
}
推荐阅读
- azure-devops - 在 python 中的 Azure Function 中从 Azure Blob 存储读取数据
- twilio - 返回 twiml 时出现 Twilio 节点 VoiceResponse 错误
- ssl - 发布自包含应用程序时无法创建 SSL/TLS 安全通道
- vim - 如果我想跳过某些行,如何在 vim(或 sed)中插入行号?
- reactjs - 使用 react-app-rewired 升级到 create-react-app 4.0 版:服务器启动错误
- python - 如何使用随机发生器使我的平台彼此远离
- r - “pmg 错误(R ~ LotteryDummy + mkt + smb + hml + Log_mktcap + bm + LaggedR:时间段数不足”
- python-3.x - 如何通过检查生成的文件的特定值来从 python 终止 linux 进程?
- vb.net - 尝试使用调用关闭表单时出现异常
- r - 将一个数据帧中的一个观察值与另一个数据帧中的每个观察值匹配,而无需公共变量