【问题标题】:How to reserve space for Text in SwiftUI如何在 SwiftUI 中为文本保留空间
【发布时间】:2020-11-06 16:16:09
【问题描述】:

我有一个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()

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

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

【问题讨论】:

    标签: macos swiftui swiftui-text


    【解决方案1】:

    如果对您有帮助,请使用Color.clear

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

    【讨论】:

      【解决方案2】:

      你可以试试fixedSize:

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

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


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

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

      【讨论】:

      • 这很有用,但最终结果并不完全是我想要的,因为当文本发生变化时,整个工作表都会改变宽度。
      • @RobN 哦,我现在明白了。我添加了一个可能的解决方案,但它的工作方式与 Asperi 的答案类似 - 目标是隐藏字符串。
      猜你喜欢
      • 2017-10-26
      • 1970-01-01
      • 2022-09-28
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2019-01-11
      相关资源
      最近更新 更多