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

Posted

技术标签:

【中文标题】SwiftUI:在 Tabview 的 WatchOS 8.1RC 上立即弹出 NavigationLink【英文标题】:SwiftUI: NavigationLink pops out immediately on WatchOS 8.1RC in Tabview 【发布时间】:2021-12-08 07:44:21 【问题描述】:

我在 watchOS 8.1RC 中发现了一个回归,其中 NavigationLink 从 TabView 触发。 它立即被驳回。

它在 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()
    

【问题讨论】:

如果没有Minimal Reproducible Example,就无法帮助您进行故障排除。代码中的NavigationLink 没有机会工作。 为什么?它在 watchOS 7 或 8 中运行良好……如果你能解释一下为什么 le 代码是错误的…… 将确切的代码放入一个空白项目中,看看它是否重现了您的问题 在应用程序中见证相同的行为。在 8.0 的设备上很好,升级到 8.1 的设备每次都会从导航链接视图中弹出。 Apple 方面的 8.1 发生了一些变化,因为它一直工作到 7.3(当我们第一次为我们的应用实现 UI 时)。 问题仍然存在于 watchOS 8.3 beta1 【参考方案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 点将保留。

【讨论】:

感谢您的提示,但就我而言,它并没有给出好的结果。我必须等待Apple修复。我将使用最后一个测试版进行测试,以检查它是否仍然损坏。目前我对 .sheet 使用了一种奇怪的解决方法

以上是关于SwiftUI:在 Tabview 的 WatchOS 8.1RC 上立即弹出 NavigationLink的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 无限 TabView 项

在 SwiftUI 中构建一个自定义的类 TabView 视图

更改 TabView (SwiftUI) 中未选中图标的颜色

SwiftUI 在 NavigationLink 视图中隐藏 TabView 栏

TabView 在 iOS13 SwiftUI 上无法正常工作

SwiftUI TabView 不更新视图