gpt4 book ai didi

ios - SwiftUI:不推荐使用 NavigationDestinationLink

转载 作者:可可西里 更新时间:2023-11-01 00:24:53 24 4
gpt4 key购买 nike

今天早上安装 Xcode 11 beta 5 后,我注意到 NavigationDestinationLink 已弃用,取而代之的是 NavigationLink

此外,这就是 Apple 在发行说明中所说的:

NavigationDestinationLink and DynamicNavigationDestinationLink are deprecated; their functionality is now included in NavigationLink. (50630794)

我使用 NavigationDestinationLink 的方式是通过 self.link.presented?.value = true 以编程方式将新 View 推送到堆栈中。 NavigationLink 中似乎没有该功能。

有人知道吗?我不想再使用 NavigationDestinationLink,因为它已被弃用......

谢谢!

更新:实际上,NavigationDestinationLink 方式不再有效,所以我想我们无法再以编程方式推送?

更新 2:

NavigationLink(destination: CustomView(), isActive: $isActive) {
return Text("")
}

这行得通,但是当您将 isActive 传递给 true 时,任何状态更新都会触发此代码并一遍又一遍地推送...另外,如果您将它传回给 false,它将弹出 View 。不仅是更新,如果你将 isActive 设置为 true,它会推送 View (好),如果我们按下后退按钮,它会返回然后立即再次推送,因为这仍然是真的。玩 onAppear 是我的希望,但回到它时它没有被调用......我不确定我们应该如何使用它。

最佳答案

在使用 NavigationLink(destination:isActive) 一段时间后,我比旧的 NavigationDestinationLink 更喜欢它。旧的 View 有点困惑,而新的方法看起来更优雅。一旦我弄清楚如何在没有动画的情况下进行推送,这将使应用程序启动时的状态恢复变得非常容易。

但是有一个问题,一个又大又丑的错误。 :-(

enter image description here

以编程方式推送 View 工作正常,以编程方式弹出 View 也可以。当我们在推送 View 中使用 BACK 按钮时,问题就开始了,它每隔一段时间就会表现得很奇怪。第一次弹出 View 时, View 会立即弹出并再次推送。第二次它工作正常。然后第三次重新开始。

我已经创建了一个错误报告 ( number here )。我建议您也这样做并引用我的电话号码,以帮助 Apple 将它们组合在一起并引起更多关注。

我设计了一个解决方法,基本上包括用我们自己的替换默认的后退按钮:

class Model: ObservableObject {
@Published var pushed = false
}

struct ContentView: View {
@EnvironmentObject var model: Model

var body: some View {
NavigationView {
VStack {
Button("Push") {
// view pushed programmatically
self.model.pushed = true
}

NavigationLink(destination: DetailView(), isActive: $model.pushed) { EmptyView() }
}
}
}
}

struct DetailView: View {
@EnvironmentObject var model: Model

var body: some View {
Button("Bring me Back (programatically)") {
// view popped programmatically
self.model.pushed = false
}
// workaround
.navigationBarBackButtonHidden(true) // not needed, but just in case
.navigationBarItems(leading: MyBackButton(label: "Back!") {
self.model.pushed = false
})
}
}

struct MyBackButton: View {
let label: String
let closure: () -> ()

var body: some View {
Button(action: { self.closure() }) {
HStack {
Image(systemName: "chevron.left")
Text(label)
}
}
}
}

关于ios - SwiftUI:不推荐使用 NavigationDestinationLink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273717/

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