gpt4 book ai didi

swift - 如何将 HSplitView 左右固定到窗口范围

转载 作者:行者123 更新时间:2023-12-05 04:32:45 26 4
gpt4 key购买 nike

我有一个示例 View ,我正在使用它来尝试弄清楚 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 分隔线向左拖动足够大时,整个 View 会缩小并在左侧留下空间。分隔器在松开时也会弹回。是否有修改器或更好的布局可用于使其不具有那种奇怪的收缩效果?我没有看到 Xcode 的侧边栏这样做。另外,如何消除 VSplitView 与其下方 View 之间的间隙?

enter image description here

最佳答案

在 SwiftUI 中,窗口大小是基于内容的,因此当您限制内容的最小大小时,您必须对一侧(假设左侧)设置相同的大小限制,以便在允许的范围内通过分隔符更改右侧,即可能的模式如下:

    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 测试

关于swift - 如何将 HSplitView 左右固定到窗口范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71598189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com