如何在SwiftUI中编写分数

4xy9mtcn  于 2023-06-21  发布在  Swift
关注(0)|答案(2)|浏览(108)

我正在做一个小应用程序来帮助孩子们学习数学。
但是,我不知道如何在SwiftUI中编写分数?
我想要这样的东西:1⁄2
谢谢你的帮助:)

xpcnnkqh

xpcnnkqh1#

更新:Xcode 13.4 / iOS 15.5

现在完全动态的字体缩放支持,没有布局硬代码。
主要部件:

ZStack {
        Text("\(numerator) ")
            .alignmentGuide(VerticalAlignment.center,
                            computeValue: { d in d[.bottom] })
            .alignmentGuide(HorizontalAlignment.center,
                            computeValue: { d in d[.trailing] })

        Text("\u{2215}").font(.system(size: scale))

        Text(" \(denominator)")
            .alignmentGuide(VerticalAlignment.center,
                            computeValue: { d in d[.top] })
            .alignmentGuide(HorizontalAlignment.center,
                            computeValue: { d in d[.leading] })
    }

Test code is here

原创

希望以下内容对您有所帮助。当然,您可以根据需要调整参数。
演示:

进近代码:

import SwiftUI

struct FractionView: View {
    var numerator: String
    var denominator: String
    var body: some View {
        HStack {
            Text("\(numerator)")
                .offset(x: 4, y: 0)
                .alignmentGuide(VerticalAlignment.center,
                                computeValue: { d in d[.bottom] })
            Text("∕").font(.system(size: 32))
            Text("\(denominator)")
                .offset(x: -4, y: 0)
                .alignmentGuide(VerticalAlignment.center,
                                computeValue: { d in d[.top] })
        }
    }
}

struct TestFraction: View {
    var body: some View {
        VStack(spacing: 8) {
            FractionView(numerator: "1", denominator: "2")
            FractionView(numerator: "5", denominator: "7")
            FractionView(numerator: "11", denominator: "19")
            FractionView(numerator: "31", denominator: "9")
        }
    }
}

struct TestFraction_Previews: PreviewProvider {
    static var previews: some View {
        TestFraction()
    }
}
7fhtutme

7fhtutme2#

我最近遇到了一种方法,它可能比目前提出的解决方案更灵活(不需要适应不同的字体大小或样式)。
将Unicode符号用于上标和下标数字,并与Unicode分数斜杠组合使用。一个非常简单的解决方案可能是:

Text("\u{2077}\u{2044}\u{2081}\u{2081}") // --> returns ⁷⁄₁₁

有一篇有趣的文章进一步讨论了这种方法:https://coderexmachina.medium.com/displaying-mathematical-fractions-in-swiftui-6a4dd625d842

相关问题