🫙

SwiftUI で Spacer() に .padding()【混ぜるな危険】

2024/02/22に公開

環境

macOS Ventura 13.6.4
Xcode 15.2

次のコードの結果は?

var body: some View {
    VStack() {
        Text("Hello, World!")
        Spacer()
        Rectangle()
            .fill(.red)
    }
}

結果

次のコードの結果は?

var body: some View {
    VStack() {
        Text("Hello, World!")
            .padding(.horizontal)
        Spacer()
        Rectangle()
            .fill(.red)
    }
}

結果

次のコードの結果は?

var body: some View {
    VStack() {
        Group {
            Text("Hello, World!")
            Spacer()
        }
        Rectangle()
            .fill(.red)
    }
}

結果

次のコードの結果は?

var body: some View {
    VStack() {
        Group {
            Text("Hello, World!")
            Spacer()
        }
        .padding(.horizontal)
        Rectangle()
            .fill(.red)
    }
}

結果

なんと Spacer縦方向に伸びました。見たところ、 Rectangle と同等の力を持ったようです。

次のコードの結果は?

Spacerpadding を付けてみます。

var body: some View {
    VStack() {
        Text("Hello, World!")
        Spacer()
            .padding()
        Text("Hello, World!")
        Spacer()
            .padding(.vertical)
        Text("Hello, World!")
        Spacer()
            .padding(.horizontal)
        Rectangle()
            .fill(.red)
    }
}

結果

.vertical でも .horizontal でも指定なしでも 縦方向に Rectangle と同等の力を持つようです

終わりに

この機能を積極的に使うことはあまりないと思いますが、ハマった人のために筆を取りました。

Discussion