NSLayoutConstraint는 iOS 및 macOS 개발에서 Auto Layout 시스템을 사용하여 뷰 간의 관계를 정의하고 관리하는 데 사용되는 클래스입니다. 이 클래스는 뷰의 크기와 위치를 지정하는 제약 조건을 설정하여 다양한 화면 크기와 방향을 수용할 수 있도록 합니다.
NSLayoutConstraint는 다음과 같은 구성 요소를 통해 정의됩니다
1.아이템(Item): 제약 조건이 적용될 뷰나 레이아웃 가이드. firstItem과 secondItem이 있으며, 하나 또는 두 개의 아이템을 사용할 수 있습니다.
2.속성(Attribute): 뷰나 레이아웃 가이드의 속성으로, NSLayoutAttribute 열거형을 사용하여 지정됩니다. 예를 들어, .left, .right, .top, .bottom, .width, .height, .centerX, .centerY 등이 있습니다.
3.관계(Relation): 첫 번째 아이템의 속성과 두 번째 아이템의 속성 간의 관계를 정의합니다. NSLayoutRelation 열거형을 사용하여 equal, lessThanOrEqual, greaterThanOrEqual을 설정할 수 있습니다.
4.상수(Constant): 제약 조건의 값에 추가되는 고정 값입니다. 예를 들어, 뷰의 여백이나 오프셋 등을 정의할 때 사용됩니다.
5.배수(Multiplier): 제약 조건의 값에 곱해지는 값입니다. 기본값은 1.0입니다.
다음은 NSLayoutConstraint를 정의하는 일반적인 형식입니다:
let constraint = NSLayoutConstraint(
item: firstItem,
attribute: firstAttribute,
relatedBy: relation,
toItem: secondItem,
attribute: secondAttribute,
multiplier: multiplier,
constant: constant
)
예제
let redView = UIView()
let blueView = UIView()
// redView의 너비를 blueView의 너비와 동일하게 설정하는 제약 조건
let widthConstraint = NSLayoutConstraint(
item: redView,
attribute: .width,
relatedBy: .equal,
toItem: blueView,
attribute: .width,
multiplier: 1.0,
constant: 0
)
추가 사항
1.활성화(Activation): 제약 조건을 활성화하려면 isActive 속성을 true로 설정하거나, NSLayoutConstraint.activate([constraint]) 메서드를 사용합니다.
2.제약 조건 비활성화: NSLayoutConstraint.deactivate([constraint]) 메서드를 사용하여 제약 조건을 비활성화할 수 있습니다.
3.Visual Format Language (VFL): VFL을 사용하여 제약 조건을 텍스트 형식으로 정의할 수 있습니다.
let views = ["redView": redView, "blueView": blueView]
let constraints = NSLayoutConstraint.constraints(
withVisualFormat: "H:|-[redView]-[blueView]-|",
options: [],
metrics: nil,
views: views
)
NSLayoutConstraint.activate(constraints)
NSLayoutConstraint는 인터페이스 빌더(Interface Builder)에서도 설정할 수 있으며, 코드로 제약 조건을 생성하고 관리할 수도 있습니다. 오토 레이아웃을 사용하면 다양한 화면 크기와 방향에 따라 유연하게 레이아웃을 조정할 수 있어 반응형 디자인을 구현하는 데 매우 유용합니다.
'programmer '프로그래머'' 카테고리의 다른 글
GitKraken 효율성 (0) | 2024.08.05 |
---|---|
label 레이블 (0) | 2024.07.30 |
UI요소 (0) | 2024.07.29 |
@objc 정의 (0) | 2024.07.25 |
디자인 패턴 관계도 'design pattern' (0) | 2024.07.12 |