SwiftUI:在WatchOS 8.1RC的Tabview中,NavigationLink立即弹出

10

我发现了一个在watchOS 8.1RC中出现的回归问题,与从TabView触发的NavigationLink有关。 它会立即被关闭。

在watchOS 8.0或模拟器(watchOS 8.0)中可以正常工作。 您知道有没有解决方法吗? 谢谢

示例代码:

import SwiftUI

@main
struct TestNavigationApp: App {
    var body: some Scene {
        WindowGroup {
            NavigationView {
                ContentView()
            }
        }
    }
}

struct ContentView: View {
    var body: some View {
        List {
            NavigationLink(destination: ContentView1()) {
                Text("To TabView")
            }
        }
        
    }
}

struct ContentView1: View {
    var body: some View {
        TabView {
            NavigationView {
                NavigationLink(destination: ContentView2()) {
                    Text("To ContentView2")
                }
            }
            VStack {
                Text("Screen2")
            }
        }
    }
}

struct ContentView2: View {
    var body: some View {
        Text("ContentView2")
    }
}

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

如果我将这段代码剪切/粘贴到Xcode 13中的全新watchOS项目中,如果我在运行到装有watchOS 8.1的真实设备上时立即复制该问题,并且该代码在模拟器(watchOS 7或8.0)或在安装有watchOS 8.0的真实设备上按预期工作。但是如果我犯了错误,我会很乐意学习! - Raphaël Barthomeuf
只有一件事情缺失了,就是每个空白项目都会创建的基本部分"@main"。 - Raphaël Barthomeuf
问题出在 NavigationView 上,而不是 @main。尝试将 NavigationView 放在 TabView 内部而不是外部,每个选项卡都需要一个。在 SO 中提到了关于 NavigationView 内部有 TabView 的几个 bug。 - lorem ipsum
2
在一个应用程序中观察到相同的行为。在使用8.0设备上很好,但是升级到8.1后,每次从navigationlink视图弹回来。自从我们第一次为应用程序实现UI以来,苹果在8.1方面做了一些改变,因为它一直工作到7.3。 - Brad Martin
2
问题仍然存在于watchOS 8.3 beta1中。 - Raphaël Barthomeuf
显示剩余9条评论
1个回答

1

我在使用watchOS 8.1 (和8.3 beta)时遇到了同样的问题,而之前的watchOS版本却可以正常工作。

我们通过将NavigationView移动到TabView内部来解决了这个问题。虽然这种解决方法并不理想,但它似乎可以正常工作。

@State private var tabSelection = 1

var body: some Scene {
    WindowGroup {
        TabView(selection: $tabSelection) {
            NavigationView {
                // List goes here
            }
            .tag(1)
            
            VStack(alignment: .center, spacing: 12, content: {
                
                // content 2nd tab: we didn't have a list in the 2nd tab
            })
            .tag(2)
        }
    }
}

然而,此修复会影响到两个方面:

我没有成功使navigationBarTitle工作,因此屏幕顶部不会有标题。 如果您在列表中点击一个项目,它将导航到您的页面(如预期),但屏幕底部的TabView点将保留。


谢谢这个提示,但在我的情况下它并没有给出好的结果。我必须等待苹果修复。我将使用最新的测试版来检查是否仍然存在问题。目前我使用一个奇怪的解决方法,使用.sheet。 - Raphaël Barthomeuf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接