## 1. NSLayoutAnchor ### 제약을 주고 싶은 View의 Anchor Property에 접근하여 정의하는 방식이다. - 코드가 간결하여 가독성이 높다. - `NSLayoutConstraint.Attribute` 서브 클래스는 추가적으로 Type 검사를 제공하여 유효하지 않은 제약 조건을 생성하는 것을 방지한다. ```swift let button = UIButton() self.addSubView(button) button.translatesAutoresizingMaskIntoConstraints = false button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true ``` <br/></br> ## 2. NSLayoutConstraint ### NSLayoutConstraint class의 convenience method를 통해 직접 생성하는 방식이다. - Layout에 관여하지 않는 parameter도 모두 값을 지정해주어야 한다. - 가독성이 떨어진다. - `NSLayoutAnchor`와 다르게 Type 유효 검사를 하지 않기 때문에 에러가 발생할 수 있다. ```swift NSLayoutConstraint(item: myView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leadingMargin, multiplier: 1.0, constant: 0.0).isActive = true ``` <br/></br> ## 3. Visual Format Language ### ASCII 같은 시각적 형식 문자열로 설명되는 제약 조건이다. - 시각적으로 정의하기 때문에 표현성이 좋다. - 간결한 표현방식이라 한 번에 여러 제약을 정의할 수 있다. - 모든 제약을 정의할 수 없다. ```swift let format = "H:|[button(200)]|" let format2 = "V:|[button(100)]|" ```
Activity