我有一個示例視圖,我用它來嘗試弄清楚 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 分隔器向左拖動足夠多時,整個視圖會縮小并在左側留下空間。分離器在釋放時也會彈回。是否有修改器或更好的布局可以用來使它沒有那種奇怪的收縮效果?我沒有看到 Xcode 的側邊欄這樣做。另外,如何消除 VSplitView 和它下面的視圖之間的差距?

uj5u.com熱心網友回復:
在 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 測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/449639.html
上一篇:Symfony6無法使用郵件程式發送電子郵件(未配置資料庫)
下一篇:NSTextField的樣式
