我有一个简单的用例,使用NavigationLink
将一个屏幕推入另一个屏幕。在iOS 14.5 beta(1,2,3)中出现了奇怪的行为,即推送的屏幕被推出后立即弹出。
我成功创建了一个示例应用程序,在其中复制了此问题。我认为原因是存在@ Environment(\.presentationMode)
,它似乎重新创建视图,并导致推送的视图被弹出。
在Xcode 12 / iOS 14.4中,完全相同的代码可以正常工作。
这是一个示例代码。
import SwiftUI
public struct FirstScreen: View {
public init() {}
public var body: some View {
NavigationView {
List {
row
row
row
}
}
}
private var row: some View {
NavigationLink(destination: SecondScreen()) {
Text("Row")
}
}
}
struct SecondScreen: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
public var body: some View {
VStack(spacing: 10) {
NavigationLink(destination: thirdScreenA) {
Text("Link to Third Screen A")
}
NavigationLink(destination: thirdScreenB) {
Text("Link to Third Screen B")
}
Button("Go back", action: { presentationMode.wrappedValue.dismiss() })
}
}
var thirdScreenA: some View {
Text("thirdScreenA")
}
var thirdScreenB: some View {
Text("thirdScreenB")
}
}
struct FirstScreen_Previews: PreviewProvider {
static var previews: some View {
FirstScreen()
}
}