Swiftui 进度视图已隐藏

Swiftui Progress View Hidden

您好,我想在栏按钮项目上制作未确定的进度视图。完成后我想隐藏它,但是 hidden() 方法没有像 disabled(Bool) 这样的参数。如何在任务完成后隐藏进度视图?

这就是我想要的

我不知道如何在 swiftui 上以编程方式隐藏它,因为它没有参数。

这是代码

.navigationBarItems(leading:
   Button(action: {
      self.presentationMode.wrappedValue.dismiss()
   }, label: {
        Text("Cancel")
            .foregroundColor(.orange)
    })
 , trailing:
    //this should be hidden when the work done not always
    ProgressView()
        .hidden()
  )

您可以创建该 ViewExtension

extension View {
    @ViewBuilder func isHidden(_ isHidden: Bool) -> some View {
        if isHidden {
            self.hidden()
        } else {
            self
        }
    }
}

然后动态隐藏视图:

struct ContentView : View {
    
    @State var isHidden = false
    
    var body : some View {
        
        NavigationView {
            VStack {
                Text("Hello World")
            
                Button(action: {
                    self.isHidden.toggle()
                })
                {
                    Text("Change loading")
                }
            }
            .navigationBarItems(leading:
               Button(action: {
               }, label: {
                    Text("Cancel")
                        .foregroundColor(.orange)
                })
             , trailing:
                ProgressView()
                .isHidden(isHidden) //<< isHidden takes a bool whether it should be hidden
            )
        }
    }
}

哦,我的朋友有另一个解决方案。如果 $isProgressViewShow 状态为假,它使用 EmptyView

.navigationBarItems(leading:
     Button(action: {
          self.presentationMode.wrappedValue.dismiss()
     }, label: {
           Text("Cancel")
             .foregroundColor(.orange)
     })
, trailing: self.isProgressViewShow ?
     AnyView(ProgressView()) : AnyView(EmptyView())

)

隐藏 Progress View

self.isProgressViewShow = true

自定义可重复使用的 ProgressView - 循环

struct CustomProgressView: View {

var title: String
var total: Double = 100
@Binding var isShown: Bool
@Binding var value: Double

var body: some View {
    VStack {
    
        ProgressView(value: value, total: total) {
            Text(title)
                .font(.headline)
                .padding()
        }
        .background(RoundedRectangle(cornerRadius: 25.0)
                        .fill(Color.white)
                        .overlay(RoundedRectangle(cornerRadius: 25.0)
                                    .stroke(Color.gray, style: StrokeStyle()))
        )
        .progressViewStyle(CircularProgressViewStyle(tint: .muckleGreen))
        .padding()
    
    }
    .padding(.top)
    .isHidden(!isShown)
}

}

你可以在你的视图中这样使用它

VStack {
 ZStack {
 CustomProgressView(title: "Adding Post", isShown: self.$viewModel.isLoading, 
 value: self.$viewModel.uploadPercentageComplete)

 }

 }