Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

teunteun2

[iOS] Stack View 내의 Stack View 구조로 연습해보기 본문

iOS

[iOS] Stack View 내의 Stack View 구조로 연습해보기

teunteun2 2022. 4. 10. 03:03

오늘 2주차 솝트 세미나를 들으면서

정말 오랜만에 중첩된 구조의 스택뷰를 레이아웃을 잡아봤는데,,

 

한번 잘못 잡으면 도통 어디서부터 뭐가 잘못됐는지 모르겠어서

답답해서 정리해본 Stack View 레이아웃 잡기

 

바로 시작해볼까용 ㅋ

 

이렇게 생긴 구조를 만드는 것이 목표

 

 

 

1. 안쪽부터 바깥쪽으로

보통 스택뷰 레이아웃을 잡을 땐

안쪽부터 바깥쪽으로 잡는 것이

안꼬이고 쉽다고 한다

 

그래서 총 13개의 뷰 부터 대충

자리를 잡아주었다

 

대충 배치한 13개 뷰

 

 

 

2. Stack View 로 안쪽부터 묶기

위의 두 줄은 Horizontal,

세번째 줄 오른쪽 네개의 뷰들은 Vertical,

세번째 줄 양 옆으로 고르게 배치되므로 Horizontal,

전체적으로 네줄이므로 전체는 Vertical

 

총 5개의 스택뷰가 필요하다.

 

스택뷰로 만들고 싶은 UIView 드래그 해서

StackView embed 

 

 

 

안쪽의 스택뷰부터 잡아주면서

마지막에 전체 Vertical 스택뷰를 잡아주면

밑의 그림처럼 뭔가 정리된듯 안된듯 정리가 된다

 

 

 

 

3. Alignment & Distribution

이제 스택뷰를 쓰는 이유이자 가장 중요한

Alignment와  Distribution을 설정해야 함!

 

Alignment -> 스택뷰 내에 어딜(상하좌우) 기준으로 정렬할지

Distribution ->  스택뷰 내의 뷰 간의 관계

 

Vertical StackView - Alignment

Fill 양옆으로 꽉 채워짐 
Leading 왼쪽 정렬
Center 가운데 정렬
Trailing 오른쪽 정렬

 

Horizontal StackView - Alignment

Fill 위아래로 꽉 채워짐 
Top 위에 붙도록 정렬
Center 가운데 정렬
Bottom 바닥에 붙도록 정렬

 

Distribution

Fill 무작정 꽉 채워진다. 따라서 각 컨텐츠의 Height 혹은Width를 지정해주어야 한다.
Fill Equally 모든 구성 뷰들의 너비 혹은 높이가 같도록 배분 (spacing을 자유롭게 설정 가능)
Fill Propotionally 컨텐츠의 크기에 따라 비율적으로 배분
Equal Spacing 컨텐츠의 크기 변화 없이 무조건 같은 간격으로 배분 (spacing 자동 설정됨)
Equal Centering 각 컨텐츠의 가운데끼리의 간격이 같도록 배분

 

그럼

 

맨 위 두줄 Horizontal 스택뷰 부터

Alignment와 Distribution을 설정해봅시다

 

 

이 두줄은 같은줄에 위치한 뷰끼리

모두 같은 너비와 간격을 가져야 하고

위아래로 꽉 채워진 형태여야 하므로

 

Alignment는 위아래로 채워 정렬하는 Fill,

Distribution은 같은 너비와 간격을 보장하는 Fill Equally

 

 

 

 

같은 맥락으로

세번째 줄 오른쪽 Vertical 스택뷰와

세번째줄  왼쪽 오른쪽을 포함하는 Horizontal 스택뷰도

 

Alignment는 좌우(상하)로 채워 정렬하는 Fill,

Dstribution은 Fill Equally 로 설정합시다 ..~

 

 

 

아직 이상해도 괜찮아요 ^^

 

마지막으로 네줄짜리

바깥쪽 Vertical 스택뷰는

네줄 모두 좌우로 꽉찬 형태이지만

각 줄마다의 Height은 제각각이므로

 

Alignment 은 Fill,

Distribution도 Fill 로 설정합니다.

 

 

4. 전체 스택뷰 Auto Layout 잡기

 

여기까지 하면 스택뷰가 화면을 벗어나고

자기맘대로 늘어나있음...

 

제자리를 잡아주기 위해

가장 바깥쪽 Vertical 스택뷰의 레이아웃을 잡아줍시다.

 

 

 

대충 상하좌우 여백 레이아웃을 잡아주면

아래와 같이 자리를 잘 잡습니다.

 

 

이제 다 끝나다고 생각하고 빌드를 해보면

깜짝 놀랄겁니다.... 이상하게 나오거든요 ..

 

 

 

5. Distribution Fill

왜그러느냐 ?

바로 가장 바깥쪽 Vertical StackView의

Distribution을 Fill로 설정했기 때문!

 

Distribution을 Fill로 설정할 때에는

Fill Equally와 다르게

각 구성 뷰들의 높이나 너비를

직접 설정해주어야 합니다.

 

왜?

Fill Equally는

각 뷰의 높이나 너비가 계산 가능하지만

무작정 Fill 해버리면

어떻게 Fill할지 컴퓨터는 모르거든요 ..

 

이 경우엔 전체 스택뷰가 Vertical 스택뷰니까

너비가 아닌 정확한 높이를 설정해주어야 하는데

 

이때 !!!!

 

높이를 절대적인 값으로 설정해주면

지금 작업중인 시뮬 기기 종류에선 잘보이더라도

 

화면이 매우 작은 핸드폰 (ex. iPhoneSE..) 이나

반대로 매우 큰 핸드폰 에선 대참사가 일어납니다...

 

왼쪽 절대적인 값으로 설정, 오른쪽은 상대적인 비율로 설정

 

대참사를 막기 위해

상대적인 비율로 레이아웃을 잡아줍시다.

 

 

 

저는 맨 위 스택뷰를 기준으로

나머지 스택뷰와 뷰 끼리의

Equal Height를 설정해준 후

Multiplier를 조절해줬습니다 ~~

 

 

여기까지 다 하면

어느 기기로 빌드하든

예쁘게 화면에 따라 비율이 요리조리 잘 맞춰지는

스택뷰를 볼 수 있습니ㄷr....

 

끝!!!!!