gpt4 book ai didi

ios - SwiftUI NavigationLink 自动弹出,这是意外的

转载 作者:行者123 更新时间:2023-11-29 05:12:30 24 4
gpt4 key购买 nike

我在具有分割 View (横向)的 iPad 上使用 NavigationLink 时遇到一些问题。这是一个例子:

screen recording

以下是重现该问题的代码:

import SwiftUI

final class MyEnvironmentObject: ObservableObject {
@Published var isOn: Bool = false
}

struct ContentView: View {
@EnvironmentObject var object: MyEnvironmentObject

var body: some View {
NavigationView {
NavigationLink("Go to FirstDestinationView", destination: FirstDestinationView(isOn: $object.isOn))
}
}
}

struct FirstDestinationView: View {
@Binding var isOn: Bool

var body: some View {
NavigationLink("Go to SecondDestinationView", destination: SecondDestinationView(isOn: $isOn))
}
}

struct SecondDestinationView: View {
@Binding var isOn: Bool

var body: some View {
Toggle(isOn: $isOn) {
Text("Toggle")
}
}
}

// Somewhere in SceneDelegate
ContentView().environmentObject(MyEnvironmentObject())

有人知道解决这个问题的方法吗?一个简单的解决方法是禁用分割 View ,但这对我来说是不可能的。

最佳答案

好的,这是我的调查结果(使用 Xcode 11.2 测试),下面是有效的代码。

在 iPad 中,NavigationView 进入了 Master/Details 样式,因此具有初始链接的 ContentView 处于事件状态,并且处理从环境对象更新的绑定(bind),因此刷新,这会导致激活通过相同的绑定(bind)查看详细信息,从而破坏导航堆栈。 (注意:由于 stack 样式,iPhone 中不存在此功能,这会停用 Root View )。

所以,这可能是解决方法,但是有效 - 这个想法不是将绑定(bind)从一个 View 传递到另一个 View ,而是直接在最终 View 中使用environmentObject。也许情况并不总是如此,但无论如何在这种情况下,需要避免 Root View 刷新,因此它不应该在主体中具有相同的绑定(bind)。类似这样的事情。

final class MyEnvironmentObject: ObservableObject {
@Published var selection: Int? = nil
@Published var isOn: Bool = false
}

struct ContentView: View {
@EnvironmentObject var object: MyEnvironmentObject

var body: some View {
NavigationView {
List {
NavigationLink("Go to FirstDestinationView", destination: FirstDestinationView())
}
}
}
}

struct FirstDestinationView: View {

var body: some View {
List {
NavigationLink("Go to SecondDestinationView", destination: SecondDestinationView())
}
}
}

struct SecondDestinationView: View {
@EnvironmentObject var object: MyEnvironmentObject

var body: some View {
VStack {
Toggle(isOn: $object.isOn) {
Text("Toggle")
}
}
}
}

关于ios - SwiftUI NavigationLink 自动弹出,这是意外的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59545289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com