在异步操作期间,我需要临时在视图中隐藏“后退按钮”。 我想防止用户在操作完成之前离开视图。
可以使用.navigationBarBackButtonHidden(true)永久隐藏。 但是,显然用户在这种情况下无法返回,因此被卡住了。 我想念什么?
以下是一个人为设计的示例,用于演示:
struct TimerTest: View {
@State var isTimerRunning = false
var body: some View {
Button(action:self.startTimer) {
Text("Start Timer")
}
.navigationBarBackButtonHidden(isTimerRunning)
//.navigationBarBackButtonHidden(true) // This does hide it, but then it can't be unhidden.
}
func startTimer()
{
self.isTimerRunning = true
_ = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: false) { timer in
print("Timer fired!")
self.isTimerRunning = false
}
}
}
答案 0 :(得分:2)
这是有效的解决方案。 “后退”按钮无法隐藏,它由栏管理并由父视图拥有,但是可以通过以下方法隐藏整个导航栏。
通过Xcode 11.4 / iOS 13.4测试
struct ParentView: View {
@State var isTimerRunning = false
var body: some View {
NavigationView {
VStack {
NavigationLink("Go", destination: TimerTest(isTimerRunning: $isTimerRunning))
}
.navigationBarHidden(isTimerRunning)
.navigationBarTitle("Main") // << required, at least empty !!
}
}
}
struct TimerTest: View {
@Binding var isTimerRunning: Bool
var body: some View {
Button(action:self.startTimer) {
Text("Start Timer")
}
}
func startTimer()
{
self.isTimerRunning = true
_ = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: false) { timer in
DispatchQueue.main.async { // << required !!
self.isTimerRunning = false
}
}
}
}