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)
}
}
您好,我想在栏按钮项目上制作未确定的进度视图。完成后我想隐藏它,但是 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)
}
}