はじめに
SwiftUIにおいて EmptyView()
がレイアウトに影響を与えないか気になったので、検証しました。
環境
- OS: macOS Sonoma 14.2.1 (23C71)
- Swift: 5.9.2
- シミュレータ: iPhone 15 Pro Max (17.2)
検証コード
以下のコードを実行して検証しました。
VStack
の spacing
に 16
を指定したので、もしレイアウトに影響を与えるなら Text
同士の間隔が大きくなるなどするはずです。
ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 16) {
Text("Foo")
Text("Foo")
EmptyView()
Text("Foo")
EmptyView()
.border(.red)
Text("Foo")
EmptyView()
.frame(height: 8)
.border(.blue)
Text("Foo")
}
}
}
実行結果
検証コードの実行結果です。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F138245%2F7fce2ad5-f0e9-b557-547d-87ac348b745b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=691dc37fe8d15f8b2b488b2afd06ec24)
EmptyView()
はレイアウトに影響を与えず、 Text("Foo")
が等間隔に5つ並びました。
おわりに
EmptyView
はレイアウトに一切影響しないことがわかりました。
これを知っておくと、例えばオプショナルな View
で nil
の代わりに EmptyView()
を返すことで、非オプショナルにできます。
またもし EmptyView
がレイアウトに影響を与えるケースがあれば、コメントなどで教えてくださると嬉しいです。