swift - 使用 SwiftUI 的 macOS 应用程序中的导航视图不稳定
问题描述
我正在尝试使用 SwiftUI 为 macOS 应用程序创建主/详细视图。目标是在侧栏中选择一个项目并让它相应地更改主视图。我的这个例子的代码如下所示:
import SwiftUI
struct MyMasterView: View {
let names = ["Homer", "Marge", "Bart", "Lisa"]
var body: some View {
List {
ForEach(names, id: \.self) { name in
NavigationLink(name, destination: MyDetailView(name: name))
}
}
.frame(width: 150, height: 300)
}
}
struct MyDetailView: View {
var name = "Name"
var body: some View {
HStack {
Text("Hello \(name)")
.font(.largeTitle)
}
.frame(width: 450, height: 300)
}
}
struct ContentView: View {
var body: some View {
NavigationView {
MyMasterView()
MyDetailView()
}
.navigationViewStyle(DoubleColumnNavigationViewStyle())
.frame(width: 600, height: 300)
}
}
运行 Mac 应用程序时,侧栏选择可能会变为非活动状态,有时会出现弹出视图而不是更改详细视图。有关该问题的屏幕截图,请参见下文。这是 Mac 上 SwiftUI NavigationView 的一个错误,还是我需要实现一些东西才能使其在 macOS 上工作?
解决方案
从 Xcode 11.0 (11A420a) 和 macOS Catalina (19A558d) NavigationView 按预期工作:
import SwiftUI
struct DetailView: View {
let text: String
var body: some View {
Text(text)
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct ContentView: View {
private let names = ["Homer", "Marge", "Bart", "Lisa"]
@State private var selection: String?
var body: some View {
NavigationView {
List(selection: $selection) {
Section(header: Text("The Simpsons")) {
ForEach(names, id: \.self) { name in
NavigationLink(destination: DetailView(text: name)) {
Text(name)
}
}
}
}.listStyle(SidebarListStyle())
DetailView(text: "Make a selection")
}
}
}
推荐阅读
- python - 何时使用 iloc 和 loc 作为布尔值
- jquery - 检查表jquery上是否存在具有特定td的行
- python-3.x - 多项式和字典
- knockout.js - 使用 Knockout 在不同的 div 上单击添加/删除类到元素
- typescript - Screeps:无法使用 Typescript 启动器导入某些模块
- r - 将数据框列中的值替换为键值查找中的值
- javascript - findOne 没有达到我知道的价值
- php - 在 Wordpress 上 http 上传图片时出错
- mysql - 存储过程mysql在我执行时返回null
- android - 如何在 Android 中显示 BluetoothDevicePicker?