使用 SwiftUI 的 macOS 应用程序中的导航视图不稳定
Posted
技术标签:
【中文标题】使用 SwiftUI 的 macOS 应用程序中的导航视图不稳定【英文标题】:Erratic navigation view in macOS app with SwiftUI 【发布时间】:2019-08-01 13:43:28 【问题描述】:我正在尝试使用 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 上工作?
https://youtu.be/BF7m1OszZ5w
【问题讨论】:
【参考方案1】:从 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")
【讨论】:
这种方法是否允许侧边栏滚动? 是的,侧边栏可以滚动,但是由于固定的宽度/高度,窗口无法调整大小;希望在下一个测试版中得到修复 您的方法效果很好。希望 SwiftUI 的问题将在未来的 Xcode 版本中得到修复。此外,在示例中,NavigationView
可以替换为 HStack
或 VStack
。再次感谢您的帮助。以上是关于使用 SwiftUI 的 macOS 应用程序中的导航视图不稳定的主要内容,如果未能解决你的问题,请参考以下文章
使用 SwiftUI 在 MacOS 中的多列 TableViews
为啥 macOS 中的 SwiftUI 多行换行文本在 Preview 中有效,但在实际应用中无效?
如何在 SwiftUI 生命周期中删除 macOS 中的最大化、最小化和关闭按钮?