【问题标题】:SwiftUI ProgressView in List can only be displayed onceList中的SwiftUI ProgressView只能显示一次
【发布时间】:2023-02-26 15:13:01
【问题描述】:

我正在研究一项需要几秒钟的功能。所以我想在我的逻辑进行时显示一个ProgressView

不确定这是否是 SwiftUI 中的错误,但在下面的代码中,当我第二次单击按钮时,进度视图不再显示(第一次单击很好)

struct ContentView: View {
  @State var inProgress = false
  var body: some View {
    List {
      if inProgress {
        HStack {
          Text("Waiting...")
          ProgressView()
        }
      } else {
        Button("Click Me") {
          inProgress = true
          Task {
            try? await Task.sleep(nanoseconds: UInt64(2 * 1_000_000_000))
            inProgress = false
          }
        }
      }
    }
  }
}

请注意,此问题仅在List 下发生。如果我将其更改为VStack,则每次单击该按钮时都会显示ProgressView

【问题讨论】:

    标签: ios swiftui


    【解决方案1】:

    要在每次单击时显示 ProgressView,请将新的 .id() 添加到 HStack(或 ProgressView),以便重新绘制:

        HStack {
          Text("Waiting...")
          ProgressView()
        }.id(UUID())  // <--- here
    

    注意,你也可以使用Task.sleep(for: .seconds(2))

    【讨论】:

    • 它奏效了……你能提供更多细节吗?在显示其他组件时(如Text),我没有提供这个id
    • 很难确切地说出原因,因为代码(ProgressView 等...)不可用。似乎对视图(列表)进行了某种优化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多