如果rgb视图的容器(VStack)与底部黑色视图不冲突,则如何设置rgb视图之间的默认间距(100pt)(例如iPhone 11 Pro Max)。如果没有100p高的空间,但是会缩小。(如屏幕截图中的iPhone SE)
我的代码:
struct ContentView: View {
var body: some View {
VStack(spacing: 0) {
VStack(spacing: 0) {
Rectangle()
.foregroundColor(.red)
.frame(height: 100)
Spacer()
.frame(minHeight: 10, maxHeight: 100)
Rectangle()
.foregroundColor(.green)
.frame(height: 100)
Spacer()
.frame(minHeight: 10, maxHeight: 100)
Rectangle()
.foregroundColor(.blue)
.frame(height: 100)
}
Spacer()
.frame(minHeight: 10, maxHeight: 600)
Rectangle() // keyboard
.frame(height: 200)
}
}
}
所以问题是: 在iPhone 11 Pro Max上,maxHeight:100的垫片的高度= 10(而不是100)。 (黑视图和VStack之间的 BUT 空间允许)
我如何解释行为?
答案 0 :(得分:2)
您需要将idealHeight
与.fixedSize
一起使用Spacer
和{>
Spacer()
.frame(minHeight: 10, idealHeight: 100, maxHeight: 600)
.fixedSize()
答案 1 :(得分:0)
在最后一个垫片上使用垫片(minLength:10)。
struct ContentView: View {
var body: some View {
VStack(spacing: 0) {
VStack(spacing: 0) {
Rectangle()
.foregroundColor(.red)
.frame(height: 100)
Spacer()
.frame(minHeight: 10, maxHeight: 100)
Rectangle()
.foregroundColor(.green)
.frame(height: 100)
Spacer()
.frame(minHeight: 10, maxHeight: 100)
Rectangle()
.foregroundColor(.blue)
.frame(height: 100)
}
Spacer(minLength: 10)
Rectangle() // keyboard
.frame(height: 200)
}
}
}
代码中的问题是,当您将Spacer().frame(minHeight: 10, maxHeight: 600)
之类的空格内包裹一个空格时,首先将其视为一个框架,然后再将该空格内的空格视为该空格。框架的默认布局优先级与其他视图相同。因此,父级将为其提供与内部VStack相同的空间量。通过删除frame修饰符,Spacer的布局优先级最低,因此,内部VStack将占用尽可能多的空间,除了spacer要求的至少10个点和该矩形的200个点之外。