하위 뷰 측정하기
레이아웃 중 하위 뷰의 크기를 조회합니다.
하위 뷰 측정하기은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
측정이 레이아웃을 결정합니다
자식 뷰를 배치하려면 먼저 자식 뷰를 측정해야 합니다. SwiftUI 레이아웃은 협상 과정입니다. 부모가 크기를 제안하고, 자식이 응답하면, 부모가 그 결과를 조정합니다.
하위 뷰의 크기 묻기
Subviews의 각 프록시는 주어진 ProposedViewSize에 대해 sizeThatFits(_:)으로 응답합니다. 프록시는 해당 제안에 따라 자식 뷰가 차지할 크기를 반환합니다.
let size = subview.sizeThatFits(.unspecified)세 가지 확인용 제안
자식 뷰의 유연성을 알아보려면 세 가지 방법으로 확인하십시오. .zero는 최소 크기, .infinity는 최대 크기, .unspecified는 이상적인 크기를 보여 줍니다.
let minSize = subview.sizeThatFits(.zero)
let maxSize = subview.sizeThatFits(.infinity)
let ideal = subview.sizeThatFits(.unspecified)특정 너비 제안하기
줄바꿈되는 텍스트에는 구체적인 너비를 제안하고 높이는 nil로 두십시오. 그러면 자식 뷰가 해당 너비에서 필요한 높이를 보고합니다.
let proposal = ProposedViewSize(width: 200, height: nil)
let fit = subview.sizeThatFits(proposal)레이아웃 우선순위
각 하위 뷰는 priority(.layoutPriority로 설정됨)를 노출합니다. 공간이 부족할 때는 우선순위가 더 높은 자식 뷰에 이상적인 크기를 먼저 할당합니다.
for subview in subviews {
let p = subview.priority
// distribute space to higher priority first
}사용자 지정 값 읽기
하위 뷰는 LayoutValueKey를 통해 형식이 지정된 데이터를 전달할 수 있습니다. layout은 배치에 영향을 주도록 subview[MyKey.self]를 읽습니다. 예를 들어 항목별 간격을 지정할 수 있습니다.
private struct RankKey: LayoutValueKey {
static let defaultValue: Int = 0
}
let rank = subviews[0][RankKey.self]레이아웃 값 설정하기
뷰는 layoutValue(key:value:) 수정자를 사용하여 layout 값을 설정하므로, 자식 뷰가 사용자의 layout에 힌트를 전달할 수 있습니다.
Text("Featured").layoutValue(key: RankKey.self, value: 10)하위 뷰 사이의 간격
하위 뷰는 spacing 선호 설정을 노출합니다. subview.spacing.distance(to:along:)을 사용하면 한 축을 따라 인접한 두 자식 뷰 사이의 권장 gap을 가져올 수 있습니다.
let gap = subviews[0].spacing.distance(
to: subviews[1].spacing, along: .horizontal)크기 누적하기
가로 layout은 자식 뷰의 width를 모두 더하고 가장 큰 height를 사용합니다. 모든 자식 뷰를 먼저 측정하면 아무것도 배치하기 전에 container 크기를 계산할 수 있습니다.
let sizes = subviews.map { $0.sizeThatFits(.unspecified) }
let totalWidth = sizes.reduce(0) { $0 + $1.width }
let maxHeight = sizes.map(\.height).max() ?? 0배치 중 다시 측정하기
placeSubviews에서는 위치가 보고한 내용과 일치하도록 다시 측정하거나 캐시된 sizes를 재사용해야 합니다. 측정은 실제 렌더링이 아니라 저렴한 대리 호출입니다.
func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
for s in subviews {
let size = s.sizeThatFits(.unspecified)
// use size to position s
_ = size
}
}부모의 제안 준수하기
항상 받은 제안을 준수해야 합니다. 부모가 고정된 width를 제안하면 그 안에서 자식 뷰를 배치해야 하며, 조용히 영역을 넘기면 안 됩니다. 그렇지 않으면 layout이 잘립니다.
let containerWidth = proposal.width ?? .infinity빠른 확인: 측정
하위 뷰 측정에 대한 이해도를 테스트합니다.
복습: 하위 뷰 측정
측정은 사용자 지정 layout의 핵심입니다. .zero, .infinity, .unspecified로 자식 뷰를 탐색하여 최소·최대·이상적인 크기를 파악하고, 줄 바꿈 콘텐츠에는 구체적인 width를 제안하며, layout 우선순위와 spacing 선호 설정을 준수해야 합니다.
사용자 지정 LayoutValueKey 값으로 자식 뷰가 힌트를 전달할 수 있습니다. 두 프로토콜 메서드에서 일관되게 측정하여 보고된 크기와 배치가 항상 일치하도록 하세요.
자주 묻는 질문
“하위 뷰 측정하기” 강의는 무료인가요?
네 — “하위 뷰 측정하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“하위 뷰 측정하기”에서 뭘 배우나요?
레이아웃 중 하위 뷰의 크기를 조회합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“하위 뷰 측정하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Layout 프로토콜 기초
- 하위 뷰 측정하기
- 플로 레이아웃 만들기
- 레이아웃 캐시와 성능