AutoLayout

박성민·2021년 2월 6일
0

iOS

목록 보기
15/30

AutoLayout은 뷰에 적용된 제약 조건에 따라 뷰 계층 구조에 있는 모든 뷰의 크기와 위치를 동적으로 계산합니다.
이러한 제약 기반 접근 방식을 사용하면 내부 및 외부 변경에 동적으로 응답하는 사용자 인터페이스를 구축 할 수 있습니다.

제약조건(Constraint)의 속성

Item1의 항목 = Item2의 항목 * Multiplier + Constant

  • Relation: 동일, 이상, 이하
  • Multiplier, Constant: 제약조건의 값
  • Priority: 우선순위

제약조건 경쟁

  • Relation: 제약조건 간 경쟁에 영향을 미치는 요소로 관계(relation)가 있다. 예를 들어 레이블 A에 대해 중앙에 위치해야 하고, 왼쪽으로 100 포인트 이상 떨어져야한다는 제약조건이 있다고 가정해보자. 레이블 A는 크기 유지라는 제약조건이 있을 때 경쟁이 발생할 수 있다.
  • Priority: 우선순위가 높은 것이 먼저 적용된다. 우선순위는 최대 1000까지의 자연수로 표시되며 수가 클 수록 높은 우선순위를 가진다.
  • Error: 동시에 만족할 수 없는 제약조건의 경우 에러를 발생시킨다. 예를 들어 오른쪽으로 80만큼 떨어지는 제약조건과 40만큼 떨어지는 제약조건이 동시에 존재하면 충돌로 인한 에러가 발생한다.

뷰의 컨텐츠 크기 Intrinsic Content Size

View는 Intrinsic Contents Size라고하는 독자의 사이즈를 갖고 있습니다. 사이즈이므로 Horizontal과 Vertical 양방향으로 설정되어 있습니다. 한 방향만 설정하는 것도 가능합니다. UILabel의 경우에는 텍스트를 딱 감쌀수 있는 사이즈가 Intrinsic Content Size 입니다. 또한 UIProgressView에서는 Vertical방향만 설정되어 있습니다. UIView에는 양축 모두 설정되어 있지 않습니다.

  • Content Hugging Priority은 고유 크기보다 늘어나지 않으려는 성질로 기본값은 251이다.
  • Content Compression Resistance Priority는 고유 크기보다 작아지지 않으려는 성질로 기본값은 750이다.

Autoresizing Mask

상위 뷰의 bounds가 변형될 때 하위 뷰의 autoresizing mask에 따라 하위 뷰의 사이즈를 재조정한다.

Auto Layout과의 차이점

오토레이아웃과의 차이점은 오토레이아웃은 부모뷰 뿐만 아니라 형제뷰끼리의 관계도 설정할 수 있지만 오토리사이징은 부모뷰에 대해서만 관계를 설정할 수 있다는 것이다.

translatesAutoresizingMaskIntoConstraints

뷰의 Autoresizing mask가 Auto Layout constraint로 변환되는지 여부를 결정하는 Bool값.

  • 인터페이스 빌더에서 뷰를 작성하면 디폴트로 false 이지만 코드로 작성할 경우 디폴트 값이 true이다. 코드로 작성하면서 Auto Layout을 동적으로 변환할 경우 반드시 false로 지정해줘야한다.
  • 만일 이 값이 true이면, 해당 뷰의 오토리사이징 마스크에 의해 지정된 constraints를 자동으로 만든다. 뷰의 크기나 위치를 수정하고 싶으면 뷰의 frame, bounds, center properties를 변경하여햐 한다.
  • 오토리사이징 마스크는 constraints 완전하게 만드므로 추가적인 constraints를 줄 수 없다. 자체적으로 오토레이아웃을 사용하기 위해서는 이 값이 false여야 한다.

출처 및 참고

profile
iOS시작~

0개의 댓글