- 제약은 두 뷰 사이의 관계를 표현한다
- view들의 제약을 가지고 AutoLayout Engine이 화면에 UI를 배치한다
UI를 화면에 배치하는 방법
let frame = CGRect(x: 0, y: 0, width: 200, height: 200)
let subview = UIView(frame: frame)
self.view.addSubview(subview)
- Frame을 직접 설정해서 화면을 배치하면 각 기기별로 화면 비율이 다르기 때문에 각 기종마다 세팅을 전부 해줘야하는 골치 아픈 일이 생긴다.
- 상대적인 제약이 필요한 이유는 결국 다양한 사이즈의 기기를 한 개의 제약(코드)으로 대응하기 위해서다.
- AutoLayout 사용 시 코드 요약
let subView = UIView()
subView.translatesAutoresizingMaskIntoContraints = false
self.view.addSubview(subView)
leadingAnchor.constraint(equlTo: view.leadingAnchor)
- 제약과 관련된 메서드를 입력 시켜주면 된다
- IpadOS의 Split View,
size class
, 화면 회전 대응 (portrait & landscape) 대응
- 정확한 수치로 분기하지 않고, 그룹화해서 대응할 수 있다
절대적 vs 상대적
- size 200 의 뷰 (width 200, height 200)
-> 어느 기기에서나 200 x 200
- VC의 류트뷰에서 각 모서리가 20씩 떨어져 있는 뷰
-> 기기 사이즈에 따라 달라짐
CHCR
- CH: content hugging
-> 공간을 채워야할 때, Priority가 낮은 뷰가 늘어난다
- CR: content resistance
-> 공간이 부족할 때, Priority가 낮은 뷰가 찌그러진다
- 스크롤 뷰의 제약 잡기
스크롤 뷰와 전체 뷰 간의 제약을 잡아 놔야 한다
- Content Layout Guide의 제약
스크롤 뷰에 나올 컨텐츠의 크기를 알려줘서 스크롤이 되게 만들어 줘야 한다
- 한마디로 scene <-> split view, split view <-> content layout 간의 두 관계를 모두 제약 잡아야 한다