일단 이것만 기억 합시다. ( StackView 속성 )
- Axis : 방향
- Alignment : Axis와 반대방향의 설정 ( 뷰의 위치 )
- distribution : Axis방향을 어떠한 방법으로 채울 것이냐 ( 뷰의 크기 )
- spacing : 뷰 사이의 간격
스택뷰는 뷰안의 하위 뷰의 오토레이아웃을 편리하게 설정 할 수 있도록 UIKit에서 제공하는 도구이다!!
10개짜리 스탬프버튼을 10개 constraints를 전부 설정해줘야 한다는 말이다.
StackView만 constraints설정하고 ( 그저 fill equally )
중간중간 View가 들어가 있는 것을 볼 수 있는데 이것은 StackView설정 할 때 첫번쨰와 마지막의 객체가 스택뷰의 방향의 양끝에 딱 스택뷰 안에 View를 넣고 하위 StackView에 Constraint를 주어 간격을 설정 한 것이다.
- Horizontal : 수평
- VertiCal : 수직
이렇게 2개가 있다. 여기에서 이름
은 Axis(방향)
를 의미한다.
다시 한번 이것만 기억 합시다. ( StackView 속성 )
- Axis : 방향
- Alignment : Axis와 반대방향의 설정 ( 뷰의 위치 )
- distribution : Axis방향을 어떠한 방법으로 채울 것이냐 ( 뷰의 크기 )
- spacing : 뷰 사이의 간격
오류가 나는 이유 -> 뷰의 크기를 정확히 모른다.
왼쪽상단에보면 빨간색 화살표가 보인다.
위에서Label의 크기
=font의 크기
( 주황색 라벨 만큼의 크기 )
이렇지만 StackView에 들어가면 그 크기는 StackView에 맞게 설정된다.
아니 다 채워졌는데 왜 오류가 나지??distribution : fill은 공간이 부족 할 때 priority기준으로 늘릴 뷰를 선택하고 남는공간을 해당뷰로 채운다.
Priority : 우선순위
- fill : 뷰의크기를 가득 채워준다.
- fill equally : 모두 동등한 크기로 지정한다.
- fill Proportionally : 하위 뷰의 고유한 크기의 비율만큼 크기를 설정하고 가득 채운다.
- Equal Spacing : 하위 뷰는 그대로두고 뷰 사이에 동등한 공간으로 나머지 공간을 채운다.
- Equal Centering : StackView의 중심에 하위 뷰를 두고 하위 뷰 사이의 간격을 layoutGuide크기만큼 공간을 넣는다.
-> spacing을 모두 똑같이주고 가운데 정렬이다. ( space 속성이 필요없음 )
- 첫번째번뷰의 LeadingAnchor를 StackView의 LeadingAnchor에 고정한다.
- 마지막뷰의 trailingAnchor를 StackView의 trailingAnchor에 고정한다.
- Spacing을 적용 ( 떨어뜨린다. )
- distribution 속성을 적용시킨다. ( 뷰 크기변환 )
즉, 양끝고정하고 스페이싱을준다.
근데 첫번째가 늘어나있다??( Priority가 같다 )이래서 오류가 나는 것 입니다. 이제 priority(우선순위를 설정하면됩니다.
오류해결법 : 마지막뷰 ( 세번째 뷰 ) 가 늘어나야 됨
Horizontal -> Hugging Horizontal(가로) priority를 다른 두개의 뷰보다 낮추면됩니다.
spacing을 10준 모습입니다. 스페이싱이 들어가고 남는 공간에 뷰가 같은 크기로 설정 된 것을 볼 수 있다.
- 만약 하나의 라벨의 크기가 워낙 크다면 ??
크기를 유지하는 것을 볼 수 있다.
- 그럼 전부 크면??
전부 라벨이 잘린다. 스페이싱이 먼저!
6,3,1 의 비율을 가진 뷰를 포함한 스택뷰 그러면 그 뷰의 크기는 스페이싱을 제외한 뷰의 크기에서
6:3:1로 크기가 설정된다.
위에랑 뷰의 크기가 달라진 이유 (너무 자주 말하나...)
지금 label은 크기가 딱폰트크기
한
과세글자
의 크기와여섯글자있음
크기를 제외한 공간의 크기를 동일(2로 나눔) 하게 준것입니다.
- equal Spacing, 5.equal Centering 얘네들은 뷰 크기를 유지한채 공간을 할당을 합니다. 뷰 크기가 우선적으로 설정하고 남는 공간인데 어떻게 spacing을 제한 할 수 있나? -> spacing의 Constraint를 기준으로 하면됩니다.
오류 : 70을 주니까 검정색 ( 스페이싱)이 늘어났습니다.
뷰가 잘려버려서. spacing을 줄이거나 label을 줄여아합니다.
Axix와 반대방향을 어떻게 채울래?
: Horizontal 기준으로 세로방향을 어떻게 할래?
설명이 필요 없습니다.
네......
이렇게
감사합니당