0Pricing
Swift Academy · 강의

하위 뷰 측정하기

레이아웃 중 하위 뷰의 크기를 조회합니다.

하위 뷰 측정하기은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Layout 프로토콜 기초
  2. 하위 뷰 측정하기
  3. 플로 레이아웃 만들기
  4. 레이아웃 캐시와 성능
← Swift Academy(으)로 돌아가기