如何将 HSplitView 左右固定到 window 的范围
How to pin HSplitView left and right to the extents of the window
我有一个示例视图,我正在使用它来尝试弄清楚 VSplitView 和 HSplitView 如何协同工作,但我发现它的行为并不像我预期的那样。
struct ContentView: View {
var body: some View {
VStack {
HSplitView {
VStack {
VSplitView {
HStack {
Spacer()
Text("top")
Spacer()
}
.frame(maxHeight: .infinity)
.background(.red)
HStack {
Spacer()
Text("middle")
Spacer()
}
.frame(maxHeight: .infinity)
.background(.green)
HStack {
Spacer()
Text("bottom")
Spacer()
}
.frame(maxHeight: .infinity)
.background(.blue)
}
}
VStack {
Spacer()
Text("Right")
Spacer()
}
.frame(minWidth: 200, idealWidth: 250, maxWidth: 400)
.background(.yellow)
}
HStack {
Text("Status")
.font(.footnote)
.padding()
.frame(maxHeight: 20)
Spacer()
}
.background(.gray)
}.frame(minWidth: 600, maxWidth: .infinity, minHeight: 600, maxHeight: .infinity)
}
}
我发现当将 HSplitView 分隔线向左拖动足够大时,整个视图会缩小并向左留下 space。分隔器在松开时也会弹回。是否有修改器或更好的布局可用于使其不具有那种奇怪的收缩效果?我没有看到 Xcode 的侧边栏这样做。另外,如何消除 VSplitView 与其下方视图之间的差距?
在 SwiftUI 中 window 大小是基于内容的,所以当你限制内容的最小大小时,你必须对一侧(假设左边)有相同的大小限制,以便通过分隔线改变右边的可能性允许范围内的一侧,即可能的模式如下:
LeftSideView()
.frame(minWidth: 600) // << == to minWidth below
RightSideView()
.frame(maxWidth: 200) // << because this allows 0
}
.frame(minWidth: 600, maxWidth: 800, minHeight: 600, maxHeight: 800)
一般计算所有组合内外尺寸之和相等
测试 Xcode 13.2 / macOS 12.2
我有一个示例视图,我正在使用它来尝试弄清楚 VSplitView 和 HSplitView 如何协同工作,但我发现它的行为并不像我预期的那样。
struct ContentView: View {
var body: some View {
VStack {
HSplitView {
VStack {
VSplitView {
HStack {
Spacer()
Text("top")
Spacer()
}
.frame(maxHeight: .infinity)
.background(.red)
HStack {
Spacer()
Text("middle")
Spacer()
}
.frame(maxHeight: .infinity)
.background(.green)
HStack {
Spacer()
Text("bottom")
Spacer()
}
.frame(maxHeight: .infinity)
.background(.blue)
}
}
VStack {
Spacer()
Text("Right")
Spacer()
}
.frame(minWidth: 200, idealWidth: 250, maxWidth: 400)
.background(.yellow)
}
HStack {
Text("Status")
.font(.footnote)
.padding()
.frame(maxHeight: 20)
Spacer()
}
.background(.gray)
}.frame(minWidth: 600, maxWidth: .infinity, minHeight: 600, maxHeight: .infinity)
}
}
我发现当将 HSplitView 分隔线向左拖动足够大时,整个视图会缩小并向左留下 space。分隔器在松开时也会弹回。是否有修改器或更好的布局可用于使其不具有那种奇怪的收缩效果?我没有看到 Xcode 的侧边栏这样做。另外,如何消除 VSplitView 与其下方视图之间的差距?
在 SwiftUI 中 window 大小是基于内容的,所以当你限制内容的最小大小时,你必须对一侧(假设左边)有相同的大小限制,以便通过分隔线改变右边的可能性允许范围内的一侧,即可能的模式如下:
LeftSideView()
.frame(minWidth: 600) // << == to minWidth below
RightSideView()
.frame(maxWidth: 200) // << because this allows 0
}
.frame(minWidth: 600, maxWidth: 800, minHeight: 600, maxHeight: 800)
一般计算所有组合内外尺寸之和相等
测试 Xcode 13.2 / macOS 12.2