ios - 在 SwiftUI 中呈现 NavigationLink 时过渡动画消失了

标签 ios swift swiftui swiftui-navigationlink

我有一个带有 NavigationLinks 的列表。

List {
    ForEach(items, id: \.id) { item in
        NavigationLink(destination: ItemView(), tag: item.id, selection: self.$viewModel.selectedItemId) {
            Text("Some text")
        }
    }
    .onDelete(perform: delete)
}
.id(UUID())

还有一个相应的 ViewModel,它存储了所选项目的 ID。

class ViewModel: ObservableObject {
    @Published var selectedItemId: String? {
        didSet {
            if let itemId = selectedItemId {
                ...
            }
        }
    }
    ...
}

问题是,当我使用 NavigationLink(destination:tag:selection:) 时,过渡动画消失了—— subview 立即弹出。当我使用 NavigationLink(destination:) 时,它可以正常工作,但我无法使用它,因为我需要在选择 NavigationLink 时执行一些操作。

为什么过渡动画没有了?这是 NavigationLink(destination:tag:selection:) 的问题吗?

最佳答案

您可以将您的操作放在 NavigationLink 中。这应该可以解决您的动画问题:

List {
    ForEach(items, id: \.id) { item in
        NavigationLink(destination: ItemView(), isActive: $isActive, tag: item.id, selection: self.$viewModel.selectedItemId) {
            EmptyView()
        }
        Button(action: {
            // The action you wand to have done, when the View pops.
            print("Test")
            self.isActive = true
        }, label: {
            Text("Some text")
        })
    }
    .onDelete(perform: delete)
}
.id(UUID())

关于ios - 在 SwiftUI 中呈现 NavigationLink 时过渡动画消失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61988298/

相关文章:

ios - 错误:“预期返回Int的函数中缺少返回”

ios - 我的导航 Controller 中缺少 "Back"按钮

ios - 打开新 Controller 时显示事件指示器

swiftui - 沿 SwiftUI 路径的颜色渐变填充

swift - iOS 上的 ImageRenderer - 生成模糊图像

ios - 合成两个 CIImages 并在 UIImageView 问题中显示

ios - 使用 UIGraphics 和 CGI​​mage 从 UIImage 创建新图像时,颜色略有不同

ios - 将 Delegate 分配给 PopoverPresentationController 时出现零错误

ios - Swift 正则表达式查找全部

SwiftUI 捕获从基于 Web 的登录表单发回的 RedirectUri