【问题标题】:SwiftUI Binding Has Old/Wrong ValueSwiftUI 绑定具有旧/错误值
【发布时间】:2022-09-27 17:17:04
【问题描述】:

我有以下内容:

@State private var showNext = false

...

    VStack {
        NavigationLink(destination: NextView(showSelf: $showNext),
                       isActive: $showNext) { EmptyView() }

        Button(\"Show Next\") {
            showNext = true
        }
    }

...

struct NextView: View {
    @Binding var showSelf: Bool

    var body: some View {
        Text(\"Next\")
         .navigationTitle(\"Next\")

        Button(\"Dismiss\") {
            showSelf = false
        }
            .padding(30)
    }
}

点击Show Next 时,NextView 会按预期显示。

但是当点击Dismiss 时,什么也没有发生。

原来showSelf 在设置为false 之前已经是false。因此,将绑定传递给NextView 似乎出了点问题。

有什么问题?

    标签: ios swiftui binding


    【解决方案1】:

    当您没有正确地为 NavigationView 提供详细视图时,有时会发生这种错误,例如

    NavigationView {
        MainView()
        DetailView()
    }
    

    它试图在层次结构的更下方使用另一个视图,这可能会导致诸如 isActive 之类的事情中断。在您的情况下,NextView 中可能存在一个错误,您有 2 个视图但没有容器,请尝试将其更改为:

    struct NextView: View {
        @Binding var showSelf: Bool
    
        var body: some View {
            HStack {
                Text("Next")
                Button("Dismiss") {
                    showSelf = false
                }
            }
            .navigationTitle("Next")
        }
    }
    

    另一件非标准的事情是使用EmptyView

    另一个问题是没有多少人意识到只有一个细节导航链接(默认),如果你想要更多的级别,你需要设置 isDetail(false) 以阻止它尝试替换第一级。

    【讨论】:

    • 为什么documentation 不谈论所需的主视图和详细视图? EmptyView 的使用如何导致我的绑定具有错误的值? “导航中断”是什么意思?我没说这个?
    • 我的意思是主动打破
    • 谢谢你的时间!您的 NextView 无法解决此问题。您在哪里读到NavuigationView 需要主视图和详细视图?
    • 文本(“选择一个笔记”)developer.apple.com/documentation/swiftui/navigationview
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 2016-03-21
    • 2014-07-07
    • 1970-01-01
    • 2020-05-23
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多