每次导航到另一个屏幕时,我都会在控制台中收到此消息:
[Assert] displayModeButtonItem is internally managed and not exposed for DoubleColumn style. Returning an empty, disconnected UIBarButtonItem to fulfill the non-null contract.
Run Code Online (Sandbox Code Playgroud)
目前我在应用程序的入口点设置了导航视图,就像这样
NavigationView {
KeyboardView(matrixVM: matrixVM, isNavigationBarHidden: $isNavigationBarHidden)
.background(Color("background")
.edgesIgnoringSafeArea(.all))
.navigationBarTitle("Workspace")
.navigationBarHidden(self.isNavigationBarHidden)
.onAppear {
self.isNavigationBarHidden = true
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 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)
})
Run Code Online (Sandbox Code Playgroud)
在 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)
}
}
Run Code Online (Sandbox Code Playgroud)
一切似乎都在工作,但就在几个小时前,它没有(我正在使用 tabbar,它在工作数周后突然开始崩溃)。我觉得这有点乱,我做错了什么。知道为什么吗?谢谢您的帮助!
Sco*_*ter 22
在 iPhone 或 iPhone 模拟器上运行时,我在 Xcode 12.1 上得到了这个,但在 iPad 模拟器上没有。
将此附加到 NavigationView 为我修复了它。
.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)
使用 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")
})
}
}
Run Code Online (Sandbox Code Playgroud)
问题归结为我使用的设备。
在 iPhone 上运行它时,我会看到 OP 发布的消息。
在 iPad 上运行它时,我看不到任何消息。
现在,它为什么要这样做?
对于初学者,您可以查看此Apple 参考以displayModeButtonItem了解断言所引用的内容。
或者,查看上面代码的截图。
苹果手机:
iPad:
请注意 iPad 是如何显示 图标的displayModeButtonItem,而 iPhone 则没有。
基于此,我认为苹果犯了一个错误。也许它会在下一个版本中得到修复?
你能做的最好的事情就是提交一个错误。
FWIW,我确实查看了发行说明,但找不到任何对此的参考。
附加.navigationViewStyle(StackNavigationViewStyle())到 NavigationView 确实可以消除错误。
不幸的是,这并不总是理想的解决方案,有时可能会引入另一个特定于以下情况的现有错误StackNavigationViewStyle():导航返回后所选列表行的背景颜色保持灰色。
小智 5
将我的 iOS 13 应用程序更新到 iOS 14 后,我看到此错误并且我的导航栏无法正常工作。
要修复此错误,我只需要进行一项更改:
NavigationView{
// other code
}
.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7039 次 |
| 最近记录: |