我正在尝试在没有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的任意位置&它应该按预期工作。