每当我导航到另一个屏幕时,我都会在控制台中得到这条消息:
[Assert] displayModeButtonItem is internally managed and not exposed for DoubleColumn style. Returning an empty, disconnected UIBarButtonItem to fulfill the non-null contract.
目前,我在应用程序的入口点设置了导航视图,如下所示
NavigationView {
KeyboardView(matrixVM: matrixVM, isNavigationBarHidden: $isNavigationBarHidden)
.background(Color("background")
.edgesIgnoringSafeArea(.all))
.navigationBarTitle("Workspace")
.navigationBarHidden(self.isNavigationBarHidden)
.onAppear {
self.isNavigationBarHidden = true
}
}
然后在KeyboardView中我有导航链接
NavigationLink(destination: NotebookView(isNavigationBarHidden: $isNavigationBarHidden, saved: matrixVM), label: {
Text("Notebooks")
.font(.system(size: 14, design: .rounded))
.fontWeight(.medium)
.foregroundColor(Color("text"))
.padding(.trailing, 10)
})
在NotebookView内部,我有一个导航链接列表(每个笔记本都链接到它的详细页面)
ScrollView(showsIndicators: false) {
ForEach(notebooks, id: \.self) { notebook in
NavigationLink(destination: ExpandedSnippet(matrixVM: saved ,notebook: notebook)
.navigationBarTitle("Notebook", displayMode: .inline)) {
SnippetCard(notebook: notebook, matrixVM: saved)
.frame(width: UIScreen.main.bounds.width)
}
.padding(.bottom, 30)
}
}
一切似乎都正常,但就在几个小时前就没有了(我用的是制表栏,它在工作了几周后突然开始崩溃)。我觉得有点乱,我做错了什么。知道为什么吗?谢谢你的帮助!
发布于 2020-11-09 05:16:13
在iPhone或iPhone模拟器上运行Xcode 12.1,而不是在iPad模拟器上运行时,我就得到了这一点。
把这个附加到NavigationView上,为我修复了它。
.navigationViewStyle(StackNavigationViewStyle())
发布于 2020-09-05 15:50:20
使用Xcode 12.1 (12A7403),这似乎是固定的.
对于后人而言,先前的答案仍在下文。
我在前面也遇到过这种情况,使用了最新的Xcode 12 beta (12A8189)。
这提供了一个简单的MVP来演示这个问题。
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
List {
NavigationLink(destination: DetailView()) {
Text("First View")
}
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
}
struct DetailView: View {
var body: some View {
List {
NavigationLink(destination: Text("Detail Title")) {
Text("New View")
}
}
.navigationBarItems(trailing:
Button(action: {
print("Clicked")
}) {
Image(systemName: "square.and.arrow.up")
})
}
}
问题在于我使用的是什么设备。
在iPhone上运行它时,我将看到OP发布的消息。
在iPad上运行此程序时,我将不会看到任何消息。
现在,它为什么要这样做?
首先,您可以查看这个苹果参考,查看断言引用的displayModeButtonItem
。
或者,查看上面代码的屏幕截图。
iPhone:
iPad:
请注意iPad如何显示displayModeButtonItem
的图标,而iPhone没有显示图标。
基于此,我认为苹果犯了一个错误。也许它会在下一个版本中被修复?
你能做的最好的事情就是将错误归档。
FWIW,我确实看过发布说明,没有找到任何相关的参考。
发布于 2020-11-15 09:20:59
将.navigationViewStyle(StackNavigationViewStyle())
附加到NavigationView确实会使错误保持沉默。
不幸的是,这并不总是一个理想的解决方案,有时还会引入另一个特定于StackNavigationViewStyle()
的现有bug:所选列表行的背景色在导航后保持灰色。。
https://stackoverflow.com/questions/63740788
复制相似问题