这是针对 MacOS 的。我正在尝试制作一个相当标准的 3 窗格界面,就像您在 Xcode 和其他应用程序中看到的那样,在调整窗口大小时,中心视图具有优先权。两个侧视图可调整大小,但在调整窗口大小时应保持相同大小。我有以下示例,它可以执行我想要的操作,但是当我调整窗口大小时会出现奇怪的调整大小人工制品,但仅当我将窗口缩小时(实际上仅当它变窄时):
struct ContentView: View {
var body: some View {
GeometryReader{geometry in
HSplitView(){
Rectangle().foregroundColor(.red).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)//.layoutPriority(0)
HSplitView(){
Rectangle().foregroundColor(.black).frame(minWidth:200, idealWidth: geometry.size.width, maxWidth: .infinity).layoutPriority(1)
Rectangle().foregroundColor(.green).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)
}
}.frame(width: geometry.size.width, height: geometry.size.height)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当使窗口变窄时,左侧红色矩形似乎优先于中心矩形,导致红色矩形在两个宽度之间翻转时出现闪烁。我已经尝试了 layoutPriority 和其他一些东西,但问题仍然存在。对此的任何帮助将不胜感激。
嗯,我会的。在断断续续地挣扎了几个星期之后,在我问这个问题一个小时后,我似乎解决了它!只需将第二个 HSplitView 的 layoutPriority 设置为 1,并将中心视图也设置为 1。当你想到它时是有道理的:
struct ContentView: View {
var body: some View {
GeometryReader{geometry in
HSplitView(){
Rectangle().foregroundColor(.red).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)
HSplitView(){
Rectangle().foregroundColor(.black).layoutPriority(1)
Rectangle().foregroundColor(.green).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)
}.layoutPriority(1)
}.frame(width: geometry.size.width, height: geometry.size.height)
}
}
}
Run Code Online (Sandbox Code Playgroud)
很简单。喜欢 SwiftUI!
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |