如何在 SwiftUI 中为文本保留 space

How to reserve space for Text in SwiftUI

我有一个 sheet 显示上传文件的进度。它看起来像这样:

如您所见,更改的行(“3.4 MB of 13.9...”)被截断了。这是因为它以一个宽度开始,但随后可以在字符串中以不同的数字增长。

我尝试了以下方法,作为为可能的最大字符串保留 space 的技巧。它可以工作,但并不理想,因为白色 Rectangle 在深色模式下无法工作。

VStack(spacing: 0) {
    Text("Uploading").bold()
    Spacer().frame(height: 3)
    Text("\(currentFilename)")
    Text("\(completedFiles) of \(totalFiles) files")
    ZStack {
        Text("12345 KB of 12345 KB")    // Biggest possible string
        Rectangle().fill(Color.white)   // But how to hide it ?            
        Text("\(bytes) of \(totalBytes)")
    }
    ProgressView(value: fraction)
    Button("Cancel") { ... }        
}.padding()

我没有看到 Color.systemBackgroundColor 或类似的东西来替代 Color.white

有谁知道像这样为文本保留 space 的好技巧吗?是我的 ZStack 想法还是其他?

如果对你使用有帮助Color.clear

ZStack {
    Text("12345 KB of 12345 KB")    // Biggest possible string
       .foregroundColor(Color.clear)    // << here !!
    Text("\(bytes) of \(totBytes)")
}

你可以试试fixedSize:

Text("\(bytes) of \(totalBytes)")
    .fixedSize()

那么你就不需要像 Text("12345 KB of 12345 KB")

这样的技巧了

如果你想保持宽度不变,你可以这样做:

Text("12345 KB of 12345 KB")
    .opacity(0)