我正在将Xcode 12用于iOS 14.0部署。
应用程序上的导航正常运行(当我在其中一个子视图上单击NavigationLink时,它将导航到正确的视图,而当我单击“后退”按钮时,它将关闭该视图。)但是,当我单击后退时按钮,控制台将显示以下错误:
Trying to pop to a missing destination at /Library/Caches/com.apple.xbs/Sources/Monoceros/Monoceros-103/Shared/NavigationBridge_PhoneTV.swift:337
除了错误日志外,该应用程序还可以正常运行,因此我打算暂时忽略该错误...但是我想知道这意味着什么?我的代码中没有任何名称“ Monoceros”。我猜它与TabView是NavigationView的子视图有关吗?
答案 0 :(得分:8)
不幸的是,这是一个将 TabView
放置在 NavigationView
中的活跃问题。
如果您将 NavigationView
放在 TabView
内,错误不会自行显现,但这当然会导致从您的 Final Screen
内显示选项卡,您可能是尽量避免。
对此的解决方法是隐藏 TabView
的选项卡,使用
UITabBar.appearance().isHidden = true
但目前仅在 UIKit
内可用,因此,在 SwiftUI
目前没有解决方法,到目前为止我们需要等待 Apple 正确实施相应的.navigationBarHidden()
的 TabView 也是如此。
在将 TabView
嵌入到 NavigationView
中时,问题和意外行为一直是 reported,但是如果您已经彻底测试了您的应用并且没有发现特别的问题,那么可以肯定地说你可以坚持这个方法。
或者,您必须手动构建一个 TabView
组件,如下所示:
import SwiftUI
enum Tab {
case house, heart
}
struct TabView: View {
@Binding var tabIdx: Tab
var body: some View {
HStack {
Group {
Spacer()
Button (action: {
self.tabIdx = .house
}) {
VStack{
Image(systemName: "house.fill")
Text("House")
.font(.system(size: 10))
}
}
.foregroundColor(self.tabIdx == .house ? .blue : .secondary)
Spacer()
Button (action: {
self.tabIdx = .heart
}) {
VStack{
Image(systemName: "heart.fill")
Text("Heart")
.font(.system(size: 10))
}
}
.foregroundColor(self.tabIdx == .heart ? .blue : .secondary)
Spacer()
}
}
.padding(.bottom, 30)
.padding(.top, 10)
.background(Color(red: 0.1, green: 0.1, blue: 0.1))
.font(.system(size: 30))
.frame(height: 80)
}
}
struct FirstScreen: View {
var body: some View {
NavigationLink("Click here", destination: Text("Final Screen"))
.font(.system(size:20))
}
}
struct ContentView: View {
@State var tabIdx: Tab = .house
var body: some View {
NavigationView {
VStack(spacing: 20) {
Spacer()
if tabIdx == .house {
FirstScreen()
} else if tabIdx == .heart {
Text("Second Screen")
}
Spacer(minLength: 0)
TabView(tabIdx: self.$tabIdx)
}
.ignoresSafeArea()
}
}
}
如果你这样做,你就不可能得到
Trying to pop to a missing destination at /Library/Caches/com.apple.xbs/Sources/Monoceros/Monoceros-103/Shared/NavigationBridge_PhoneTV.swift:337
答案 1 :(得分:0)
这个问题似乎在 Xcode 13 beta 1 中得到解决。控制台中没有警告,现在将 TabView
放入 NavigationView
中是安全的:
struct ContentView: View {
var body: some View {
NavigationView {
TabView {
// ...
}
}
}
}