gpt4 book ai didi

ios - 默认 UIFont 大小和粗细,但也支持 preferredFontForTextStyle

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:00:40 28 4
gpt4 key购买 nike

如果我有自己的一组 UIFont,具有不同的大小和粗细,例如:

let customFont03 = UIFont.systemFont(ofSize: 40, weight: .thin)

我如何支持动态类型,同时仍然保留我的自定义大小和重量作为默认标准,并根据用户选择辅助功能大小的方式进行缩放?

我不确定 preferredFont(forTextStyle:) 是我想要的,因为它只接受 UIFont.TextStyle 而我不想锁定 customFont03 作为 .body.headline 等...

最佳答案

动态系统字体,指定样式、粗细和斜体

在 Swift 5 中。

我无法相信 Apple 没有提供更简洁的方法来获取具有特定粗细的动态字体。这是我的综合解决方案,希望对您有所帮助!

extension UIFont {

static func preferredFont(for style: TextStyle, weight: Weight, italic: Bool = false) -> UIFont {

// Get the style's default pointSize
let traits = UITraitCollection(preferredContentSizeCategory: .large)
let desc = UIFontDescriptor.preferredFontDescriptor(withTextStyle: style, compatibleWith: traits)

// Get the font at the default size and preferred weight
var font = UIFont.systemFont(ofSize: desc.pointSize, weight: weight)
if italic == true {
font = font.with([.traitItalic])
}

// Setup the font to be auto-scalable
let metrics = UIFontMetrics(forTextStyle: style)
return metrics.scaledFont(for: font)
}

private func with(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
guard let descriptor = fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits(traits).union(fontDescriptor.symbolicTraits)) else {
return self
}
return UIFont(descriptor: descriptor, size: 0)
}
}

你可以这样使用它:

 UIFont.preferredFont(for: .largeTitle, weight: .regular)
UIFont.preferredFont(for: .headline, weight: .semibold, italic: true)

关于ios - 默认 UIFont 大小和粗细,但也支持 preferredFontForTextStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53356530/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com