【问题标题】:SwiftUI - How to perfectly align multiple Text with different font sizes in VStack?SwiftUI - 如何在 VStack 中完美对齐具有不同字体大小的多个文本?
【发布时间】:2021-12-24 17:10:13
【问题描述】:

我在 VStack 中有 2 个 Text 元素。它们被设置为不同的字体大小。

如何让 2 个 Text 元素的第一个字形完全左对齐?这可能吗?

下面是sn-p的代码:

extension Font {
    static let countDownTitle: Font = Font.system(size: 46, weight: .regular, design: .rounded).leading(.tight)
}

struct MyView: View {
    var body: some View {
        VStack(alignment: .leading) {
            Text("Hello!!")
            Text("20.49").font(.countDownTitle)
        }
     }
}

【问题讨论】:

    标签: swiftui watchos


    【解决方案1】:

    您在这里进行了一些人工测试。请记住,按比例字体中的每个字符占用不同的空间量会占用不同的空间量。当它们被布置时,它们被放置在由字体设计师而不是我们控制的空间中。你可以看到这是你循环通过不同的数字。 4几乎是正确的,但5是很远的。这是你控制它的能力所缺乏的东西之一。

    虽然我完全不推荐这样做,但您可以使用等宽字体和.offset()

    extension Font {
        static let countDownTitle: Font = Font(UIFont.monospacedSystemFont(ofSize: 46, weight: .regular))
    }
    
    struct MyView: View {
        var body: some View {
            VStack(alignment: .leading) {
                Text("Hello!!")
                Text("50.49").font(.countDownTitle)
                    .offset(x: -2.2, y: 0)
            }
         }
    }
    

    但是,这真的很丑。

    【讨论】:

    • 感谢您的帮助@yrb。同意,很丑但似乎.offset().alignmentGuide() 是唯一的解决方案。我尝试了Text.tracking(),但这没有帮助。
    • `.offset()" 仅适用于等宽字体。按比例计算,除非您对每个数字都有单独的偏移量,否则它们会在某个地方关闭。
    猜你喜欢
    • 2020-05-16
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2017-06-30
    • 1970-01-01
    • 2018-06-03
    • 2013-10-25
    相关资源
    最近更新 更多