我希望我LoadingTitle
的屏幕宽度为 70%,所以我使用它,GeometryReader
但它会使垂直尺寸扩大,并且我LoadingTitle
需要更多的垂直空间。我希望它尽可能保持紧凑。
使用硬编码时,width: 300
我得到了正确的布局(相对宽度除外):
struct ContentView: View {
var body: some View {
VStack(alignment: .leading, spacing: 0) {
LoadingTitle()
Color.blue
}
}
}
struct LoadingTitle: View {
var body: some View {
HStack() {
Color.gray
}
.frame(width: 300, height: 22)
.padding(.vertical, 20)
.border(Color.gray, width: 1)
}
}
body
现在,如果我将my包裹在LoadingTitle
其中,GeometryReader
我可以获得正确的相对大小,但随后GeometryReader
会垂直扩展我的视图:
struct LoadingTitle: View {
var body: some View {
GeometryReader { geo in
HStack() {
Color.gray
.frame(width: geo.size.width * 0.7, height: 22, alignment: .leading)
Spacer()
}
.padding(.vertical, 20)
.border(Color.gray, width: 1)
}
}
}
我尝试按照其他建议.fixedSize(horizontal: false, vertical: true)
使用,但结果视图过于紧凑,并且其所有填充都被忽略:GeometryReader
如何以相对宽度实现第一个屏幕截图的布局?