SwiftUI VStack с гибкой прокладкой - PullRequest
1 голос
/ 03 августа 2020

У меня есть простой VStack с видом сверху и многострочным текстом внизу. Текст может обновлять свое содержимое, поэтому его размер изменяется в зависимости от количества строк. Когда это происходит, вид сверху также регулирует свое положение - перемещаясь вверх или вниз.

Я хочу, чтобы вид сверху сохранял фиксированное вертикальное положение, независимо от представлений ниже в VStack. На мой взгляд, это то, для чего нужны Spacer, поскольку они гибкие. Однако это не так.

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

1 Ответ

1 голос
/ 03 августа 2020

Вы можете обернуть его в ZStack:

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

Таким образом, все в первом VStack не будет перемещаться относительно второго VStack.

В качестве альтернативы вы можете продолжить использование VStack, но обернуть его подвиды в отдельные VStack s:

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