ビューの位置やサイズを取得する方法

SwiftUIでは、GeometryReaderを使うことによって、ビューの位置やサイズを取得することが出来ます。
GeometryReaderは、位置やサイズを知りたいビューをクロージャーにし、クロージャーの引数で位置やサイズを取得します。
ビューのサイズを取得するには?
ビューのサイズは、クロージャーの引数のsizeプロパティで取得します。
GeometryReader { geometry in
VStack(alignment: .center) {
Text("\(geometry.size.debugDescription)")
.padding()
Text("width : \(geometry.size.width), height : \(geometry.size.height)")
.padding()
}
}

引数をgeometryとして、ビューのサイズや位置を取得しています。
そして、sizeプロパティでTextビューのサイズを表示しています。
このように、ビューのサイズは、sizeプロパティで取得します。
ビューの位置を取得するには?
ビューの位置は、ビューの座標空間を受けとってから取得します。
ビューの座標空間はframeメソッドで取得します。
そして、座標はoriginプロパティを使って取得します。
iOSの座標は、左上からx座標とy座標で計算されます。
GeometryReader { geometry in
VStack(alignment: .center) {
Text("\(geometry.frame(in: .global).origin.debugDescription)")
.padding()
Text("x : \(geometry.frame(in: .global).origin.x), y : \(geometry.frame(in: .global).origin.y)")
.padding()
Text("\(geometry.frame(in: .local).origin.debugDescription)")
}
}

geometryの.frameメソッドで座標空間を取得しています。
inの後に記述しいる「.global」と「.local」は座標空間の指定です。
.globalはビュー全体の座標空間、.localはビュー自体のフレームの座標空間です。
originプロパティで座標空間での座標を取得しています。
まとめ
ビューの位置やサイズは、GeometryReaderを使って取得します。
サイズにはsizeプロパティ、位置にはframeメソッドを使います。
コメント