首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建一个斜体和黑色(权重)的UIFont对象?

如何创建一个斜体和黑色(权重)的UIFont对象?
EN

Stack Overflow用户
提问于 2021-10-27 00:51:04
回答 1查看 223关注 0票数 0

我想创建一个黑色(比粗体重)和斜体的UIFont,没有硬编码任何字体名称或任何东西。

我所有的尝试都失败了。您可以通过UIFont.systemFont(ofSize: 15.0,weight:.black),然后应用斜体符号特征来完成此操作,但这显然只适用于系统字体。(例如,Helvetica和Avenir都有各种字体粗细,其中包括斜体变体。)

这是我的尝试,但它只有一个普通的粗细斜体字体,而不是黑色。

代码语言:javascript
复制
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'.
EN

回答 1

Stack Overflow用户

发布于 2021-10-27 04:34:18

我尝试了几种不同的路线,但这看起来很有希望。看起来字体名称是必须保留的。它似乎也能从现有的字体中找到“最佳”匹配。

改编自https://github.com/wireapp/wire-ios/blob/develop/Wire-iOS/Sources/Helpers/UIFont%2BWeight.swift

代码语言:javascript
复制
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)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69731486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档