SwiftUIのGeometryReader
は、ビューのサイズや位置情報を取得し、柔軟なUIを構築するための強力なツールです。この記事では、GeometryReader
の基本的な使い方を解説します。
iOS | 13.0以上 |
XCode(当サイトの環境) | 15.0.1 |
サイズ情報の取得
SwiftUIのGeometryReader
を使用して親ビューのサイズ情報を取得し、それを表示する例です。
ポイントは、GeometryReader
内部に配置したVIewは親ビューの左上端から配置されることです。
プログラム例
import SwiftUI
struct GeometryReaderSmpView: View {
var body: some View {
GeometryReader { geometry in
VStack {
Text("Width: \(geometry.size.width)")
Text("Height: \(geometry.size.height)")
}
}
}
}

GeometryReader
はクロージャーを持ち、そのクロージャー内で渡されたgeometry
という変数を使用して、親ビューの情報にアクセスします。geometry.size.width
とgeometry.size.height
を使って、親ビューの幅と高さを取得し、それぞれの値を表示するText
ビューがVStack
内に配置されています。
このコードは、GeometryReader
が親ビューのサイズを取得し、Text
ビューに幅と高さの情報を表示します。これにより、GeometryReader
を利用して親ビューの幾何学的な情報を取得し、それをUIに反映させることができます。
レイアウトの動的な変更
取得した情報を使って、条件分岐を行うことで、特定の条件下でのレイアウトの変更が可能です。
プログラム例
import SwiftUI
struct GeometryReaderSmpView: View {
var body: some View {
GeometryReader { geometry in
VStack {
if geometry.size.width > 300 {
Text("広いレイアウト")
} else {
Text("狭いレイアウト")
}
}
}
}
}

このコードでは、GeometryReader
が親ビューの幅情報を取得しており、その幅に基づいてVStack
内に表示されるテキストを動的に切り替えています。
geometry.size.width
は画面の幅を表しており、この幅が300以上の場合は「広いレイアウト」が、それ未満の場合は「狭いレイアウト」が表示されます。if-else
文を使用して、条件に応じて異なるテキストを表示するようにしています。
このプログラムを実行すると、画面の幅に応じて表示されるテキストが変化します。このようにGeometryReader
を使用することで、ビューのサイズに基づいて動的なレイアウト変更を実現できます。
他のビューとの組み合わせ
GeometryReader
を使って取得した幾何学的情報を持つビューと、その他のビューを組み合わせる例です。
はじめに紹介したサイズ情報の取得の実行結果と見比べてみるとHeightの値が異なることがわかります。
import SwiftUI
struct GeometryReaderSmpView: View {
var body: some View {
VStack {
GeometryReader { geometry in
Text("Width: \(geometry.size.width), Height: \(geometry.size.height)")
}
.background(Color.gray)
Text("GeometryReaderの外にあるテキスト")
}
}
}

GeometryReader
は、その内部のビューに親ビューの情報を提供します。この例ではText("Width: \(geometry.size.width), Height: \(geometry.size.height)")
でその情報を利用しています。GeometryReader
で取得した情報を持つText
ビューに、背景色として.background(Color.gray)
を設定しています。
さらに、GeometryReader
の外にあるもう一つのText
ビューは、GeometryReader
の外側に配置されています。これにより、GeometryReader
内のビューと外部のビューを組み合わせて表示されることが確認できます。
まとめ
このように、GeometryReader
を利用することで親ビューの情報を取得し、その情報を持つビューを組み合わせて複雑なUIを構築することができます。
GeometryReader
は、ビューのサイズや位置などの情報を柔軟に取得する手段として非常に有用です。これらの例を参考にして、GeometryReader
を活用して動的で柔軟なUIを構築する際に役立ててください。
コメント