更新: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] })
}
测试代码在这里 https://github.com/Asperi-Demo/4SwiftUI/blob/master/PlayOn_iOS/PlayOn_iOS/Findings/TestNumericFractionByLayout.swift
Original
希望以下内容对您有所帮助。当然,您可以根据需要调整参数。
Demo:
方法代码:
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()
}
}