1

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

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

我尝试了以下方法,作为为可能的最大字符串保留空间的技巧。它可以工作,但并不理想,因为白色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()

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

任何人都知道像这样为文本保留空间的好技巧吗?是我的ZStack想法还是别的什么?

4

2 回答 2

4

如果它可以帮助您使用Color.clear

ZStack {
    Text("12345 KB of 12345 KB")    // Biggest possible string
       .foregroundColor(Color.clear)    // << here !!
    Text("\(bytes) of \(totBytes)")
}
于 2020-11-06T16:19:52.297 回答
1

你可以试试fixedSize

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

那么你就不需要像这样的黑客了Text("12345 KB of 12345 KB")


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

Text("12345 KB of 12345 KB")
    .opacity(0)
于 2020-11-06T20:48:24.643 回答