본 글은 Positioning content within layout margins (애플 공식 문서)를 한국어로 번역하여 옮긴 글입니다.
뷰를 다른 컨텐츠에 의해 가려지지 않도록 배치하세요.
레이아웃 마진(Layout Margins)은 뷰의 컨텐츠와 뷰 바운즈(Bounds) 바깥의 컨텐츠 사이에 시각적인 여백(Buffer)을 제공합니다. 레이아웃 마진은 뷰의 가장자리(Top, Bottom, Leading, Trailing)에 대한 인셋(Inset) 값으로 구성되어 있습니다. 이 인셋 값들은 뷰의 가장자리와 뷰 내부 컨텐츠 사이에 빈 여백을 만듭니다. 컨텐츠 주변에 추가한 빈 여백을 제외하고는 마진은 눈에 보이는 형태가 아닙니다.

레이아웃 마진을 고려해 제약 조건을 적용하기 위해서 아래 그림과 같이 Xcode에서 Constrain to margins 옵션을 활성화하세요. (해단 옵션을 활성화하지 않으면 Xcode는 뷰의 바운즈만을 고려해 제약 조건을 적용합니다.) 만약 상위 뷰의 마진이 뒤늦게 업데이트된다면 마진과 관련된 항목들의 위치도 그것에 맞게 업데이트됩니다.

컨텐츠의 위치를 잡는 데 제약 조건을 적용하지 않더라도 뷰의 레이아웃 마진을 고려해 수동으로 컨텐츠를 위치시킬 수 있습니다. 각 뷰의 directionalLayoutMargins 프로퍼티는 뷰의 마진으로 사용할 가장자리 인셋 값을 포함하고 있습니다. 뷰에서 항목들의 위치를 계산할 때 마진 값을 고려하세요.
UIKit은 각 뷰에 대한 기본 레이아웃 마진을 제공하지만, 기본 마진 값을 커스텀 뷰에 더 알맞게 변경할 수 있습니다. 뷰의 마진 값을 변경하려면 뷰의 directionalLayoutMargins 프로퍼티를 업데이트하세요. (Size Inspector에서 디자인 타임에 마진 값을 설정할 수도 있습니다. Layout Margins 섹션에서 Language Directional 옵션을 선택한 후, 각 뷰의 가장자리에 대한 마진 값을 입력하세요.)

뷰 컨트롤러의 최상위 뷰의 경우, UIKit은 컨텐츠를 올바르게 표시하기 위해 최소 레이아웃 마진을 강제합니다. directionalLayoutMargins 프로퍼티의 (마진) 값이 최소 값보다 작다면, UIKit은 최소 값을 사용합니다. 최소 마진 값은 뷰 컨트롤러의 systemMinimumLayoutMargins 프로퍼티로부터 가져옵니다. UIKit이 최소 마진을 적용하지 않도록 하려면, 뷰 컨트롤러의 viewRespectsSystemMinimumLayoutMargins 프로퍼티를 false로 설정하세요.
⭐️ 김지지의 NOTE
- layoutMargins: iOS 11과 그 이후부터 레이아웃 마진을 적용하기 위해 이 프로퍼티 대신 directionalLayoutMargins 프로퍼티를 사용하세요. directionalLayoutMargins 프로퍼티의 leading과 trailing 인셋 값은 이 프로퍼티의 left와 right에 대응됩니다. 예를 들어, leading 인셋 값을 20 포인트로 설정한다면, 왼쪽에서 오른쪽으로 읽는 언어 시스템에서 이 프로퍼티의 left 인셋 값도 20 포인트로 설정됩니다.
뷰 컨트롤러의 최상위 뷰에서 이 프로퍼티의 기본 값은 시스템 최소 마진과 안전 영역 인셋 값에 따라 달라집니다. 뷰 계층 구조의 다른 하위 뷰의 기본 레이아웃 마진의 기본 값은 모든 가장자리에서 8 포인트로 설정되지만, 이 값은 뷰가 안전 영역에 완전히 포함되지 않거나 preservesSuperviewLayoutMargins 프로퍼티가true라면 더 증가할 수 있습니다.
뷰의 가장자리가 상위 뷰의 가장자리에 너무 가깝고 preservesSuperviewLayoutMargins 프로퍼티가true라면, 실제 레이아웃 마진은 컨텐츠가 상위 뷰의 마진과 겹쳐지지 않도록 하기 위해 더 증가할 수 있습니다.
뷰의 실제 마진은 뷰의 구성과 directionalLayoutMargins 프로퍼티에 의해 계산됩니다. 뷰의 마진은 뷰의 insetsLayoutMarginsFromSafeArea 및 preservesSuperviewLayoutMargins 프로퍼티에 의해 영향을 받으며, 이러한 프로퍼티는 컨텐츠의 적절한 여백을 보장하기 위해 기본 마진 값을 증가시킬 수 있습니다.
⭐️ 김지지의 NOTE
- insetsLayoutMarginsFromSafeArea: 이 프로퍼티는 뷰의 레이아웃 마진이 안전 영역(Safe Area)을 기준으로 설정되게 할 지를 결정합니다. 기본값은
true입니다.- preservesSuperviewLayoutMargins: 이 프로퍼티는 상위 뷰의 레이아웃 마진을 자신의 레이아웃 마진과 일치시킬 지 결정합니다. 기본값은
false입니다.