Auto Layout은 뷰 계층 구조에 있는 모든 뷰의 크기와 위치를 해당 뷰에 적용된 제약 조건에 따라 동적으로 계산합니다.
이로인해 내부, 외부적으로 변경되는 사항에 일정한 제약조건을 통해서 비슷한 화면구성을 동적으로 제공이 가능하게 됩니다.
계산식으로 보자면은 레드뷰의 리딩은 왼쪽을 의미합니다
레드뷰의 리딩은 블루뷰의 트레일링(오른쪽) x 멀티플러(간단히 몇배로 할지 기본은 1) + 컨스턴스(이부분이 어느정도 거리를 벌릴지에 대한 제약사항입니다.)
이렇게 종합적인 계산이 되어서 블루뷰의 트레일링과 레드뷰의 리딩의 거리가 결정이 됩니다.
하나의 뷰에서의 제약사항의 이름을 살펴보겠습니다.
첫번째 그림에 대한 설명으로는 뷰의 리딩 + 뷰의 넓이가 제약사항으로 제공되어 뷰의 크기가 명확해집니다.
두번째 그림에 대한 설명으로는 뷰의 리딩 + 뷰의 트레일링 제약사항으로 뷰의 넓이를 제공해 주지 않아도 바깥 뷰의 넓이에서 제약사항 두가지를 뺀만큼을 계산하면 자연스럽게 뷰의 넓이가 계산되어져 오토레이아웃이 작동합니다.
세번째 그림은 뷰의 리딩 + 상위 뷰의 center로 설정 하였기때문에 중앙으로 대칭하게 되는 그림이기 때문에 뷰의 길이를 유추할 수 있습니다.
(간단히 이해하자면 뷰가 상위뷰의 센터로 제약사항이 설정되었기에 첫째 그림에서 절반을 나눈거로 데칼코마니처럼 오토레이아웃이 되어진다고 보면 됩니다 왜냐면 센터로 제약사항을 설정했기 때문에 왼쪽 오른쪽은 대칭이 되어지기 때문입니다.)
제가 평소 가장 헷갈리던 부분에 대한 설명입니다.
제약 사항을 추가할때 내 눈에는 명확해 보일지라도 컴퓨터에서는 모호한 값때문에 오토레이아웃에 오류를 토해낼때가 있습니다.
이전 그림처럼 간단한 하나의 뷰로 제약을 걸면은 어느정도 유추가 가능하지만 위 그림에서 처럼 두가지의 뷰의 오토레이아웃상황에 width가 정해져있지않다면 컴퓨터는 어떤게 얼마나 길이가 있어야 할지 모르기 때문에 오류가 납니다.
오토레이아웃을 가장 잘 이해하기 위해서는 xcode에서 실제로 부딪히는것이 가장 빠른 습득의 방법이라 생각합니다.
(개인적인 팁, 오토레이아웃 기본적인거, 프로젝트 진행하면서 막힌부분 기술할 예정)
위 사진처럼 오토레이아웃 제약사항을 추가하는 방법은 원하는 아이템을 클린한 후 오른쪽 아래 저 버튼을 누르면 나옵니다
위 사진에서는 맨아래 두가지를 빼고는 2 아이템 이상이 선택되어야만 활성화 됩니다.
숫자를 0에서 변동하면 2번째로 지정한 아이템의 제약사항이 기준점 기준으로 숫자만큼 이동합니다
적용한 제약사항을 확인하고 싶으면 맨 오른쪽 위에서 삼각자를 누르면 지금 선택한 아이템에 관한 내용이 나옵니다
위 화면은 제약사항을 클릭했을데 세부적으로 오른쪽에 보이는 장면인데
평소 greater than equal 과 less than equal이 엄청나게 헷갈렸다
이와 관련하여 여기에서 중요한점은 first item과 second item의 대상과 내가 생각하는 것에 따라서 달라지기 때문에 엄청 헷갈린다는 것이다.
간단하게 첫째 사진에서는 superview.trailing의 영역이 date.trailing보다 더 값이 커야 date의 내용에 따라 사이즈가 조절이 되기에 greater than equal
둘째 사진에서는 comment.trailing의 영역이 superview.trailing보다 더 작아져야 comment 내용물에 따라 늘어나더라도 less than equal인 상황이 연출이 되는 것이다.
위 두개의 상황이 first item과 second item이 반대라면 relation도 반대여아 하는것을 보여주는 경우입니다!
수식적으로 따지고 보자면 우리가 맨 처음에 썻던 사진을 다시 불러와보겠습니다.
위 그림에서 RelationShip이 부분이 Greater Than Equal, Equal, Less Than Equal을 담당하게 되는것 이라고 알면 좋습니다.