SwiftUI:当 List 和 ForEach 嵌入 TabView 时 WatchOS 8.1 中的 NavigationView 错误
Posted
技术标签:
【中文标题】SwiftUI:当 List 和 ForEach 嵌入 TabView 时 WatchOS 8.1 中的 NavigationView 错误【英文标题】:SwiftUI: NavigationView bug in WatchOS 8.1 When List and ForEach is embedded in TabView 【发布时间】:2021-12-13 06:27:37 【问题描述】:下面的代码在 WatchOS 7 和 8.0 中运行良好,但现在在 8.1 中点击该行将导航到目的地,然后立即导航回根视图。
我提交了反馈 #FB9727188 并包含以下内容以演示该问题。
struct ContentView: View
@State var tabIndex:Int = 0
var body: some View
TabView(selection: $tabIndex)
ListView()
.tabItem Group
Text("List")
.tag(0)
.padding(.bottom, 1.0)
Text("Second View")
.tabItem Group
Text("Second")
.tag(1)
.padding(.bottom, 1.0)
Text("Third View")
.tabItem Group
Text("ThirdView")
.tag(2)
struct ListView: View
var body: some View
List
ForEach((1...10).reversed(), id: \.self) _ in
NavigationLink(destination: Text("test"))
Text("Tap Me but we'll just be back here")
【问题讨论】:
***.com/questions/69663736/… 相关。在项目中也看到了这一点。 你有苹果反馈的公共链接吗? @BradMartin 你能看到吗? feedbackassistant.apple.com/feedback/9727188 【参考方案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
// content 2nd tab: we didn't have a list in the 2nd tab
.tag(2)
但是,此修复会影响两件事:
我没有让navigationBarTitle
工作,所以屏幕顶部不会有标题。
如果您单击列表中的某个项目,它将导航到您的页面(如预期的那样),但屏幕底部的 TabView 点将保留。
【讨论】:
谢谢,不是一个理想的解决方案,但感谢您的提示。您提交反馈了吗? @GarySabo 我没有提交反馈单。你认为如果我提交额外的票会有帮助吗? 是的!反馈越多,它将在内部获得更高的优先级。特别是对于仅在 WatchOS 中没有像 ios 那样受到关注的东西。我包含了一个演示项目,可以轻松显示问题。以上是关于SwiftUI:当 List 和 ForEach 嵌入 TabView 时 WatchOS 8.1 中的 NavigationView 错误的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 使用 List 和 Foreach 遍历字典中的键并创建列表视图
SwiftUI 的 List/ForEach 视图中是不是可以有一个 Button(action: -)
List 中的 ForEach 出现 SwiftUI 错误:无法使用类型为 '(@escaping () ... 的参数列表调用类型为 'List' 的初始化程序...(参见代码)