프로필 보기 화면을 SwiftUI로 작업하던 도중 View의 사이즈를 어떻게 얻을까 고민을 하였다.
self를 통해 가져오려고 해봤지만 Failed... 따라서 검색을 해서 오늘의 주제인 GeometryReader 를 학습했다.
GeometryReader란?
Apple 공식 홈페이지 문서에 간단히 나와있다.
"콘텐츠를 자체 크기 및 좌표 공간의 함수로 정의하는 컨테이너 보기입니다."
"이 보기는 상위 레이아웃에 유연한 기본 크기를 반환합니다."
그래요. 이거 쓰면 됩니다. 라고 한마디로 정의해주고 있다.
사용 방법도 매우 간단하다.
var body: some View {
GeometryReader { geometryValue in
VStack {
Image(systemName: "person")
.resizable()
.frame(width: geometryValue.size.width / 4, height: geometryValue.size.width / 4)
.clipShape(Circle())
.overlay(Circle().stroke(.gray))
.padding()
Text("사용자 이름").font(.headline)
Text("상태 메세지").font(.subheadline)
Divider()
.padding()
HStack {
VStack{
Button(action:{}) {
Image(systemName: "message.fill")
}.padding(0.1)
Text("1:1 채팅")
}
}
}.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .bottom)
}
}
Body에 GeometryReader를 클로저 표현식으로 value를 받은 뒤 해당 Value를 사용해 구하면 된다.
해당 코드를 실행하면 하단처럼 이쁘장하게 가로 길이의 1/4 크기로 이미지를 만들 수 있다.
'프로그래밍 > iOS' 카테고리의 다른 글
[SwiftUI] 특정 View에서 TabView 가리기 (0) | 2023.01.01 |
---|---|
[UIKit] TableViewCell에서 AutoLayout 동적으로 추가 및 삭제하기(AutoLayout programmatically Swift) (0) | 2022.12.25 |
[UIKit] TableView section header 간격 문제 해결 (0) | 2022.12.24 |
[SwiftUI] UIViewRepresentable 란 무엇인가? (0) | 2022.12.20 |
File System Programming Guide (2) - File System Basics (0) | 2021.01.07 |