在SwiftUI, iOS15,二级导航链接,isActive不工作



在iOS15中,它不工作:

import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink {
Dest1().navigationTitle("Dest1")
} label: {
Text("to Destination 1")
}
}
}
}
struct Dest1: View {
@State var dest2Active: Bool = false
var body: some View {
NavigationLink(
destination: Button {
dest2Active = false // not working!!
} label: {Text("dismiss")} .navigationTitle("Dest2"),
isActive: $dest2Active
) {Text("to Destination 2")}
}
}

Dest2中的dismiss按钮不工作!我记得在iOS14中,这段代码运行得很好。如何解决这个问题?

.isDetailLink(false)添加到顶级NavigationLink似乎可以解决这个问题。请注意,这适用于iPhone iOS -对于iPad,你需要使用StackNavigationStyle @workingdog在他们的答案中建议。

文档不清楚为什么这个工作(事实上,它专门指多列导航),但它似乎解决了一些NavigationLink相关的问题。参见,例如:https://developer.apple.com/forums/thread/667460

struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink {
Dest1()
.navigationTitle("Dest1")
} label: {
Text("to Destination 1")
}.isDetailLink(false)
}
}
}
struct Dest1: View {
@State var dest2Active: Bool = false
var body: some View {
NavigationLink(isActive: $dest2Active) {
Dest2(dest2Active: $dest2Active)
} label: {
Text("to Destination 2")
}
}
}
struct Dest2: View {
@Binding var dest2Active : Bool

var body: some View {
Button {
dest2Active = false
} label: {
Text("Dismiss")
}.navigationTitle("Dest2")
}
}

您需要添加.navigationViewStyle(.stack)才能使其工作。下面是我的测试代码。

import SwiftUI
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink {
Dest1().navigationTitle("Dest1")
} label: {
Text("to Destination 1")
}
}.navigationViewStyle(.stack) // <-- here the important bit
}
}
struct Dest1: View {
@State var dest2Active: Bool = false
var body: some View {
NavigationLink(
destination: Button {
dest2Active = false // now working!!
} label: {Text("dismiss")} .navigationTitle("Dest2"),
isActive: $dest2Active
) {Text("to Destination 2")}
}
}

相关内容

  • 没有找到相关文章

最新更新