gpt4 book ai didi

使用 NavigationLink isActive 时 View 之间的动画不起作用

转载 作者:行者123 更新时间:2023-12-05 04:55:22 26 4
gpt4 key购买 nike

我从 UIKit 转到 SwiftUI,我遇到了 NavigationLink 在呈现新 View 时没有动画的问题。

当以下属性为非零时,我已将 View 结构设置为包含 NavigationLink:

@State private var retrievedDeviceIdentity: Proteus.DeviceIdentity?

Proteus.DeviceIdentity 类型是一个基本的数据结构。此属性由成功的异步闭包填充,而不是直接用户交互。因此, View 结构是这样设置的,使用 NavigationLink 的 destination:isActive:label: initialiser:

var body: some View {
NavigationView {
VStack {
Form {
// Form building
}

if let deviceIdentity = retrievedDeviceIdentity {
NavigationLink(
destination: AddDeviceLinkDeviceForm(deviceIdentity: deviceIdentity),
isActive: .constant(retrievedDeviceIdentity != nil),
label: {
EmptyView()
}
)
.onDisappear() {
updateSyncButtonEnabledState()
}
}
}
}
}

retrievedDeviceIdentity 被填充为非零时,新 View 确实被呈现。但是,没有到该 View 的幻灯片过渡;它只是立即改变。在该新 View 中,点击后退按钮将幻灯片切换回该 View 。

有什么解决办法吗?由于我是 SwiftUI 的新手,如果我将新结构设置错误,那么我也欢迎对此提出反馈。

(我在 macOS Big Sur 11.0.1 上使用 Xcode 12.3。)

最佳答案

我认为这是由于条件注入(inject),尝试将其永久包含在 View 层次结构中(因此在 NavigationView 中注册),例如

VStack {
Form {
// Form building
}
}
.background(
NavigationLink(
destination: AddDeviceLinkDeviceForm(deviceIdentity: retrievedDeviceIdentity),
isActive: .constant(retrievedDeviceIdentity != nil),
label: {
EmptyView()
}
)
.onDisappear() {
updateSyncButtonEnabledState()
}
)

注意:我不确定您对 .onDisappear 的期望以及您为什么需要它,可能需要它移动到其他地方或在不同的修饰符下。

关于使用 NavigationLink isActive 时 View 之间的动画不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65421453/

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