具有灵活 Spacer 的 SwiftUI VStack

SwiftUI VStack with flexible Spacer

我有一个简单的 VStack,上面有一个视图,底部有一个多行文本。文本可以更新其内容,因此它会根据行数调整大小。当发生这种情况时,顶部的视图也会调整其位置 - 向上或向下移动。

我希望顶视图保持固定的垂直位置,独立于 VStack 中下方的视图。在我看来,这就是 Spacer 的用途,因为它们很灵活。然而,这并不能解决问题。

struct ContentView: View {
    var body: some View {
        VStack {
            HStack("Some Icons")
            Spacer()
            Text("Multiline Text")
        }
    }
}

您可以将其包装在 ZStack:

struct ContentView: View {
    var body: some View {
        ZStack {
            VStack {
                Text("top view")
                Spacer()
            }
            VStack {
                Spacer()
                Text("bottom view")
            }
        }
    }
}

这样第一个 VStack 中的所有内容都不会相对于第二个 VStack 移动。


或者,您可以继续使用 VStack,但将其子视图包装在单独的 VStack 中:

struct ContentView: View {
    var body: some View {
        VStack {
            VStack {
                Text("top view")
                Spacer()
            }
            VStack {
                Spacer()
                Text("bottom view")
            }
        }
    }
}