我正在使用 SwiftUI 开发 macOS 应用程序,并遇到了一种情况,即使用
View
动态调整 SwiftUI Rectangle
(具体来说,Slider
)的帧大小会导致窗口大小相应更改。
我的应用程序需要适应内容的可变窗口大小,但我需要窗口大小保持不受特定内部视图大小调整的影响。
将视图放置在固定大小的容器中或明确设置固定窗口大小等常见解决方案无法满足我的需求。
谢谢。
这是示例的简化版本:
import SwiftUI
struct ContentView: View {
@State private var rectWidth: CGFloat = 100
var body: some View {
VStack {
Rectangle()
.frame(width: rectWidth, height: 100)
.foregroundColor(.blue)
Slider(value: $rectWidth, in: 50...2000)
.padding()
}
}
}
使用GeometryReader解决了这个问题。
import SwiftUI
struct ContentView: View {
@State private var rectWidth: CGFloat = 100
var body: some View {
GeometryReader { geometry in
VStack {
Rectangle()
.frame(width: rectWidth, height: 100)
.foregroundColor(.blue)
Slider(value: $rectWidth, in: 50...geometry.size.width)
.padding()
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}