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 视图
更改 TabView (SwiftUI) 中未选中图标的颜色
SwiftUI 在 NavigationLink 视图中隐藏 TabView 栏