SwiftUI,如何设置Spacer的收缩行为?

xmq68pz9  于 2022-12-10  发布在  Swift
关注(0)|答案(3)|浏览(217)

如何设置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之间的空间允许)

怎么对我做出行为解释?

erhoui1w

erhoui1w1#

您需要使用idealHeight.fixedSize修饰符来表示Spacer

Spacer()
    .frame(minHeight: 10, idealHeight: 100, maxHeight: 600)
    .fixedSize()
6qfn3psc

6qfn3psc2#

使用分隔符(最小长度: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 Package 在一个像Spacer().frame(minHeight: 10, maxHeight: 600)这样的框架中时,它首先被认为是一个框架,然后是该框架中的一个Spacer。并且一个框架与其他视图具有相同的默认布局优先级。所以父视图会建议它与内部VStack具有相同的空间量。通过删除框架修饰符,Spacer具有最低的布局优先级。因此内部VStack将占用尽可能多的空间,除了由间隔符声明的最小10个点和用于矩形的200个点。

z6psavjg

z6psavjg3#

我遇到了类似的问题......
这对我来说是固定的:

Spacer().frame(minWidth: 0)

相关问题