作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在具有分割 View (横向)的 iPad 上使用 NavigationLink 时遇到一些问题。这是一个例子:
以下是重现该问题的代码:
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/
我是一名优秀的程序员,十分优秀!