SwiftUI:第一个渲染器上缺少navigationBarItems

问题描述

我看到一个奇怪的问题,我可以用一个小样本重现。如果您具有设置了navigationBarItems的详细信息视图,并且该详细信息是在导航堆栈上推送的第二个视图,则当您进入详细信息页面时,这些项目将不会显示。这是示例:

struct ContentView: View {
    var body: some View {
        NavigationView {
            vstack {
                NavigationLink(destination: MiddleTestView()) {
                    Text("Push View")
                }
            }
        }
    }
}

struct MiddleTestView: View {
    var body: some View {
        vstack {
            NavigationLink(destination: TestView()) {
                Text("Push Another View")
            }
        }
    }
}

struct TestView: View {
    var body: some View {
        vstack {
            Text("Testing 1,2,3")
        }
        .navigationBarItems(leading: Button("Test") { print("pressed") })
    }
}

如果有任何原因导致TestView重新呈现,则按钮将显示,例如,如果TestView执行此操作:

struct TestView: View {
    @State var hasChanges = false
    var body: some View {
        vstack {
            Text("Testing 1,3")
            Button("Toggle") { hasChanges = !hasChanges }
        }
        .navigationBarItems(leading: Button(hasChanges ? "Test1" : "Test2") { print("pressed") })
    }
}

然后按一下“切换”按钮将使navigationBarItems出现,并且它们将停留在那里直到视图消失。此外,如果首先显示TestView而不是MiddleTestView,则navigationBarItems没问题。我看不到这种现象的任何原因,这似乎是一个非常明显的错误,除非在我缺少某些东西的情况下,否则在SwiftUI中使用导航堆栈的工作将被彻底破坏。有人对这里发生的事情或如何解决有什么见识吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...