SwiftUI:如果不在列表中,NavigationLink 不起作用

Posted

技术标签:

【中文标题】SwiftUI:如果不在列表中,NavigationLink 不起作用【英文标题】:SwiftUI: NavigationLink not working if not in a List 【发布时间】:2019-11-15 19:56:28 【问题描述】:

我猜这可能是 beta 3 中的一个错误,因为 NavigationView 已全部损坏。但是这样的观点:

struct GenreBadge : View 
    @EnvironmentObject var store: Store<AppState>
    let genre: Genre

    var body: some View 
        NavigationLink(destination: MoviesGenreList(genre: genre).environmentObject(store)) 
            RoundedBadge(text: genre.name)
        
    

没有触发导航堆栈中的任何推送。该视图似乎根本没有交互性。如果有人找到解决方法会很好,除非 Apple 正在记录这种行为,否则我会认为它在 beta 4 之前被破坏。

【问题讨论】:

查看我的解决方案here 【参考方案1】:

我已向 Apple 报告了 Xcode 版本 11.3(11C29) 中的导航链接似乎存在错误。

注意:这个问题只出现在模拟器中。它在真实设备上运行良好。感谢@djr

以下代码在您第一次使用导航链接时按预期工作。不幸的是,它第二次变得没有响应。

import SwiftUI

struct ContentView : View 
    var body: some View 
        NavigationView 
            VStack 
                NavigationLink(destination: SomeView()) 
                    Text("Hello!")
                
            
        
    


struct SomeView: View 
    var body: some View 
        Text("Detailed View")
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    

【讨论】:

更新:看起来苹果公司正在处理这个案子。这是我报告的错误的更新:最近的类似报告:超过 10 个解决方案:确定的潜在修复 - 用于未来的操作系统更新 我以为我快疯了!感谢您发布此更新。 对我来说这个问题只存在于模拟器中。如果我在真机上运行它就完全没问题了。 查看我的解决方案here @AaronA 我能够让它工作...感谢您的跟进。【参考方案2】:

你真的在 NavigationView 中吗?以下作品。但是,如果我错过了您的观点,也许您可​​以分享更多代码。

import SwiftUI

struct ContentView : View 
    var body: some View 
        NavigationView 
            VStack 
                NavigationLink(destination: SomeView()) 
                    Text("Go!")
                
            
        
    


struct SomeView: View 
    var body: some View 
        Text("Detailed View Here!")
    

【讨论】:

这不起作用。我使用的是 Xcode 11 GM 版本。文本“Go”已禁用。 @iosCalendarpatchthecode.com 在某个时候,它停止了工作。但这很容易解决。问题是 NavigationView 内的按钮不能位于层次结构的顶部。只需将它放在 VStack 中,它就可以正常工作。我修改了代码以显示更改。【参考方案3】:

试试这个:-

var body: some View 
        NavigationView 
            NavigationButton(destination: YourView()) 
                Text("Go!")
            
        
    

【讨论】:

【参考方案4】:

导航链接

按下时触发导航演示的按钮。这是 pushViewController 的替代品

NavigationView 
    NavigationLink(destination:
        Text("Detail")
        .navigationBarTitle(Text("Detail"))
    ) 
        Text("Push")
    .navigationBarTitle(Text("Master"))

或者通过在自己的视图DetailView中使用组目的地使其更具可读性

NavigationView 
    NavigationLink(destination: DetailView()) 
        Text("Push")
    .navigationBarTitle(Text("Master"))

【讨论】:

【参考方案5】:

在 Xcode 11.3.1 中,我遇到了同样的问题,但我只需要退出 xcode 并重新启动计算机。这显然解决了一个问题(当然现在是 2021 年),但我能够毫无问题地遵循苹果的 swiftui 教程。我复制了这段代码并尝试了它......对我来说很好。也许问题是您屏幕右下角的“播放”按钮被切换了。

【讨论】:

以上是关于SwiftUI:如果不在列表中,NavigationLink 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何允许对不在编辑模式下的 SwiftUI 列表中的行进行重新排序?

SwiftUI 如何不在列表中复制 ViewModel

SwiftUI @AppStorage 不在函数中刷新

SwiftUI NavigationLink 立即导航回来

是否可以在详细视图中编辑 SwiftUI 列表元素?

如果列表行在 SwiftUI 中包含文本字段,则无法从 foreach 中删除元素