0

我试图在 SwiftUI 文本中表示分母大于 9 的分数。

我可以使用单个元素并应用偏移来实现这一点,但是随着分数的动态变化,这会有点混乱。

有没有办法使用属性文本来做到这一点?

我遇到了带有不推荐使用的方法的 thi 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)
    }
}
4

1 回答 1

1

UIFont与 是免费桥接的CTFont,这意味着您可以通过说将 aUIFont转换为 a 。SwiftUI有一个初始化器,它需要一个.CTFontas CTFontFontCTFont

因此,使用fractionFont(ofSize:)您发布的方法,此操场代码:

PlaygroundPage.current.setLiveView(
    Text("The fraction 21/345 is rendered nicely.")
        .font(Font(UIFont.fractionFont(ofSize: UIFont.systemFontSize) as CTFont))
        .padding()
)

产生这个结果:

字符串

于 2022-03-05T07:30:56.520 回答