如何设置RGB视图之间的默认间距(100pt),如果它们的容器(VStack)不与底部黑色视图冲突。(如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)
}
}
}
**因此问题是:**maxHeight的分隔符:在iPhone 11 Pro Max上,100的高度= 10(而不是100)(但黑色视图和VStack之间的空间允许)
怎么对我做出行为解释?
3条答案
按热度按时间erhoui1w1#
您需要使用
idealHeight
和.fixedSize
修饰符来表示Spacer
:6qfn3psc2#
使用分隔符(最小长度:10)为最后一个间隔器。
你的代码中的问题是,当你把一个Spacer Package 在一个像
Spacer().frame(minHeight: 10, maxHeight: 600)
这样的框架中时,它首先被认为是一个框架,然后是该框架中的一个Spacer。并且一个框架与其他视图具有相同的默认布局优先级。所以父视图会建议它与内部VStack具有相同的空间量。通过删除框架修饰符,Spacer具有最低的布局优先级。因此内部VStack将占用尽可能多的空间,除了由间隔符声明的最小10个点和用于矩形的200个点。z6psavjg3#
我遇到了类似的问题......
这对我来说是固定的: