본문 바로가기

programmer '프로그래머'

NSLayoutConstraint 정의

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