728x90
728x90
https://developer.apple.com/documentation/swiftui/geometryreader
์ค์ ๊ณต๋ถํ๊ธฐ ๐ง
GeometryReader
GeometryReader ๋ ์ปจํ ์ธ ์ ํฌ๊ธฐ์ ์์น๋ฅผ ํจ์๋ก ๋ํ๋ด๋ ์ปจํ ์ด๋ ๋ทฐ๋ก, ๋ถ๋ชจ ๋ทฐ์ ์ฌ์ด์ฆ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก๋ HStack, VStack, ZStack ์ ์ฌ์ฉํด์ ๋ ์ด์์์ ๋ฐฐ์นํ์ง๋ง,
- UIKit ์ ๊ฐ์ด ์ฌ์ฉํ ๊ฒฝ์ฐ ํน์ ์ธ๋ถ์ ์ธ ์กฐ์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํ ๊ฒ์ผ๋ก ๋ณด์ด๋ค์ ๐
- View ์ ํฌ๊ธฐ๋ ์ขํ๋ฅผ ๊ณ์ฐํ๊ณ ์ถ์๋ ํ์ฉ๋ ๊ฐ๋ฅํด๋ณด์ ๋๋ค! ๐ค
GeometryReader ์ฌ์ฉํด์ ๋ ์ด์์ ๋ฐฐ์นํด๋ณด๊ธฐ
- GeometryReader ์์ฑ์์ ํด๋ก์ ์ธ์๋ GeometryProxy ๋ก ๋์ด์์ต๋๋ค.
- GeometryProxy : ์ปจํ ์ด๋๋ทฐ์ ํฌ๊ธฐ์ ์์น์ ์ ๊ทผํ ์ ์๋ proxy
- https://developer.apple.com/documentation/swiftui/geometryproxy
- GeometryProxy ๊ฐ์ฒด์ ์ ๊ทผํด์ size, safeAreaInsets ๋ณ์์ frame(in:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค
- size : ์ปจํ ์ด๋ ๋ทฐ์ ํฌ๊ธฐ
- safeAreaInsets : ์ปจํ ์ด๋ ๋ทฐ์ safe area inset
- frame(in:) : ์ปจํ ์ด๋๋ทฐ์ frame
safeAreaInsets
- ์ปจํ
์ด๋ ๋ทฐ๊ฐ safeArea ์ด๋ ๋ถ์ด์๋ ๊ฒฝ์ฐ์๋ง ์ธก์ ํ ์ ์์ต๋๋ค.
- ์๋ ์์์ฒ๋ผ VStack ์ผ๋ก ์๋จ์ ๋ค๋ฅธ ๋ทฐ๊ฐ ์๋ ๊ฒฝ์ฐ์ ์๋จ์ ๊ฐ์ 0์ผ๋ก ๋น๋๋ค!
- EdgeInsets(top: 0.0, leading: 0.0, bottom: 34.0, trailing: 0.0)
frame(in:)
func frame(in coordinateSpace: CoordinateSpace) -> CGRect
- ์์ ๋ฉ์๋๋ iOS 17.0 ์์ deprecated
func frame(in coordinateSpace: some CoordinateSpaceProtocol) -> CGRect
- CoordinateSpaceProtocol ๋ ๋ฒ ํ์์๋ถํฐ ์ฌ์ฉ๊ฐ๋ฅ์ด์ง๋ง, ๋ด๋ถ์ global, local, named ๋ ์ฌ์ฉ๊ฐ๋ฅํด๋ณด์ ๋๋ค!
- CoordinateSpace ๋ ๋ทฐ์ ์ขํ ๊ณต๊ฐ์ผ๋ก, ์ผ๋ฐ์ ์ผ๋ก .global, .local, .named(AnyHashable) ์ ์ฌ์ฉํฉ๋๋ค.
- .global : ๋ฃจํธ ๋ทฐ(์ ์ฒด ํ๋ฉด)์ ์ขํ ๊ณต๊ฐ
- .local : ํ์ฌ ๋ทฐ์ ์ขํ ๊ณต๊ฐ
- .named(AnyHashable) : ํน์ ํ ๋ทฐ์ ์ด๋ฆ์ ๋ถ์ด๊ณ , ํด๋น ๋ทฐ์์ ๋ดค์๋์ ์ขํ ๊ณต๊ฐ
- ์ฝ๋๋ก ํ์ธํด๋ณด๋ฉด ๊ฐ๊ฐ ๋ค๋ฅธ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค!
struct ContentView: View {
var body: some View {
VStack {
Text("Hello!")
GeometryReader { geometry in
Text("Hello!")
.frame(
width: geometry.frame(in: .global).width,
height: geometry.frame(in: .global).height / 2
)
.background(Color.blue)
.onAppear {
print("\(geometry.frame(in: .global))")
print("\(geometry.frame(in: .local))")
print("\(geometry.frame(in: .named("test")))")
}
}
Text("Hello!")
.coordinateSpace(name: "test")
}
}
}
728x90
728x90
'๐ iOS > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] SwiftUI - SignInWithAppleButton / ์ ํ ๋ก๊ทธ์ธ ์ปค์คํ ๋ฒํผ (0) | 2023.10.22 |
---|---|
[iOS/SwiftUI] @Environment ์์๋ณด๊ธฐ / ๋ชจ๋ฌ ๋ทฐ ๋ซ๊ธฐ dismiss ํ์ฉ (0) | 2023.06.15 |
[iOS/SwiftUI] @ViewBuilder, @resultBuilder ๊ฐ ๋ฌด์์ผ๊น? (0) | 2023.06.07 |
[iOS] SwiftUI LazyVStack LazyHStack :: lazy load views (1) | 2022.06.07 |
[iOS] SwiftUI property wrapper @State @Binding (0) | 2022.06.02 |