如何使用 SwiftUI 显示分数
How can I show a fraction with SwiftUI
我试图在 SwiftUI 文本中表示分母大于 9 的分数。
我可以使用单独的元素并应用偏移来实现它,但是随着分数的动态变化,这会变得有点混乱。
有没有办法使用 attributedText 来做到这一点?
我遇到了带有不推荐使用的方法的 UIFont 扩展,想知道是否有任何类似的东西可以与 SwiftUI 一起使用:
extension UIFont {
static func fractionFont(ofSize pointSize: CGFloat) -> UIFont {
let systemFontDesc = UIFont.systemFont(ofSize: pointSize).fontDescriptor
let fractionFontDesc = systemFontDesc.addingAttributes(
[
UIFontDescriptor.AttributeName.featureSettings: [
[
UIFontDescriptor.FeatureKey.featureIdentifier: kFractionsType,
UIFontDescriptor.FeatureKey.typeIdentifier: kDiagonalFractionsSelector,
], ]
] )
return UIFont(descriptor: fractionFontDesc, size:pointSize)
}
}
UIFont
是 toll-free-bridged 和 CTFont
,这意味着您可以通过说 as CTFont
将 UIFont
转换为 CTFont
。 SwiftUI 的 Font
有一个接受 CTFont
.
的初始化器
因此,使用您发布的 fractionFont(ofSize:)
方法,这个 playground 代码:
PlaygroundPage.current.setLiveView(
Text("The fraction 21/345 is rendered nicely.")
.font(Font(UIFont.fractionFont(ofSize: UIFont.systemFontSize) as CTFont))
.padding()
)
产生这个结果:
我试图在 SwiftUI 文本中表示分母大于 9 的分数。
我可以使用单独的元素并应用偏移来实现它,但是随着分数的动态变化,这会变得有点混乱。
有没有办法使用 attributedText 来做到这一点?
我遇到了带有不推荐使用的方法的 UIFont 扩展,想知道是否有任何类似的东西可以与 SwiftUI 一起使用:
extension UIFont {
static func fractionFont(ofSize pointSize: CGFloat) -> UIFont {
let systemFontDesc = UIFont.systemFont(ofSize: pointSize).fontDescriptor
let fractionFontDesc = systemFontDesc.addingAttributes(
[
UIFontDescriptor.AttributeName.featureSettings: [
[
UIFontDescriptor.FeatureKey.featureIdentifier: kFractionsType,
UIFontDescriptor.FeatureKey.typeIdentifier: kDiagonalFractionsSelector,
], ]
] )
return UIFont(descriptor: fractionFontDesc, size:pointSize)
}
}
UIFont
是 toll-free-bridged 和 CTFont
,这意味着您可以通过说 as CTFont
将 UIFont
转换为 CTFont
。 SwiftUI 的 Font
有一个接受 CTFont
.
因此,使用您发布的 fractionFont(ofSize:)
方法,这个 playground 代码:
PlaygroundPage.current.setLiveView(
Text("The fraction 21/345 is rendered nicely.")
.font(Font(UIFont.fractionFont(ofSize: UIFont.systemFontSize) as CTFont))
.padding()
)
产生这个结果: