转换在NavigationView中不起作用



我正在尝试在没有NavigationLink的情况下在两个视图之间导航。

这是代码:


import SwiftUI
struct NextView: View {

@State var text = ""
@Binding var displayView: Bool

var body: some View {
// 3
//NavigationView {
VStack {
Spacer()
TextField("Type something!", text: $text)
Button("Remove View") {
withAnimation {
displayView = false
}
}
Spacer()
}.background(Color.cyan)
//}
}
}
struct InitialView: View {

@State var displayView = false

var body: some View {
// 1
//NavigationView {
if displayView {
//2
//NavigationView {
NextView(displayView: $displayView)
.transition(.slide)

//}
} else {
Button("Tap to continue") {
withAnimation {
displayView = true
}
}
}
//}
}
}

我试着把NavigationView放在三个不同的地方,一次放一个。我只是通过将结构放置在3位置或不使用它来获得我想要的动画。有人能告诉我为什么会发生这种情况,以及在位置1使用NavigationView的其他可能解决方案吗?

我只在iPhone 12模拟器中进行了测试,并且使用的是XCode版本13.4.1。

我想你只是想要这个可动画化的转换

struct InitialView: View {
@State var displayView = false
var body: some View {
NavigationView {   // << just root view, not important
ZStack {                  // << owner container !!
if displayView {
NextView(displayView: $displayView)
.transition(.slide)
} else {
Button("Tap to continue") {
displayView = true
}
}
}
.animation(.default, value: displayView)   // << animation !!
}
}
}

使用Xcode 13.4/iOS 15.5 进行测试

这是一个棘手的问题。如果仔细查看您的代码,您会发现在第3个位置,.transition应用于NavigationView。然而,在位置1&2事实并非如此。

转换必须应用于正在转换的View,在您的情况下,是NavigationView包装内容。意味着NavigationView需要modifier

将转换添加到CCD_ 10的任意位置&它应该按预期工作。

相关内容

  • 没有找到相关文章

最新更新