我将 SwiftUI 用于主窗口包含 NavigationView 的 Mac 应用程序。此 NavigationView 包含一个侧边栏列表。选择侧栏中的项目时,它会更改详细视图中显示的视图。详细视图中显示的视图大小不同,这会导致窗口大小在显示时发生变化。但是,当详细视图更改大小时,窗口不会更改大小以适应新的详细视图。
如何根据 NavigationView 的大小更改窗口大小?
我的应用程序示例代码如下:
import SwiftUI
struct View200: View {
var body: some View {
Text("200").font(.title)
.frame(width: 200, height: 400)
.background(Color(.systemRed))
}
}
struct View500: View {
var body: some View {
Text("500").font(.title)
.frame(width: 500, height: 300)
.background(Color(.systemBlue))
}
}
struct ViewOther: View {
let item: Int
var body: some View {
Text("\(item)").font(.title)
.frame(width: 300, height: 200)
.background(Color(.systemGreen))
}
}
struct DetailView: View {
let item: Int
var body: some View {
switch item {
case 2:
return AnyView(View200())
case 5:
return AnyView(View500())
default:
return AnyView(ViewOther(item: item))
}
}
}
struct ContentView: View {
var body: some View {
NavigationView {
List {
ForEach(1...10, id: \.self) { index in
NavigationLink(destination: DetailView(item: index)) {
Text("Link \(index)")
}
}
}
.listStyle(SidebarListStyle())
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
下面是示例应用程序在详细视图更改大小时的样子: