본문 바로가기

iOS/AutoLayout

iOS) Auto Layout - Constrain to margins는 뭐할 때 씀

 

안녕하세요~ 소들입니당!! :>

저는 요즘 swiftUI를 공부하고 있어서!!

아마 4월쯤부턴 이 아이의 포스팅이 자주 올라올 거 같네요 :D

 

hm.. 제가 제 포스팅에 대한 정체성을 찾아 꽤나 생각을 해봤는데

제 블로그를 읽고 댓글을 달아주시거나, 제 블로그를 알아봐주시는 거의 대~~부분은

iOS 공부를 막 시작한 개발자분들이더라구요! 기본에 대해 많이 다뤄서 그런가 ㅎㅎ

 

그래서 뭐 어쩌라고 싶겠지만,

결론부터 말하자면 저는 계속 iOS 개발 시작이 어려운 개발자들을 위해,

"기본"에 관한 글에 대해 꾸준히 작성할 거예요.

(TableView / CollectionView가 지금 다음 포스팅 대기 queue에 있따 이말임)

 

뭔데 이리 비장하냐면

누군가 2.7년차 개발자가 뭐이런 쉬운 글을 작성하고 있어?
라고 생각하실까바 하하 어쩔티비요?라고 미리 말하고 있는겁니다 하하

 

오늘 포스팅을 마지막으로 당분간 AutoLayout과는 작별할 것이고,

스토리보드로 Constraint 설정할 때

사용처도 잘 모르면서 무지성 체크 해제했을 옵션에 대해 하나 알아보고 가려고 합니다!

모든 포스팅은 편의 말투로 합니다~!!

 

 

 

 

1. 스토리보드에서 보이는 Constrain to margins ☑️의 의미

 

Constrain to margins가 뭐냐면 ㅎㅎ

스토리보드로 Constraints를 설정하다 보면,

 

 

 

 

이렇게 Constrain to margins라는 것이 체크되어 있음!!!

 

근데, AutoLayout에 대해 설정 해보신 분은 알겠지만,

이 체크는 보통!!!! 하지 않고(□), 비워두고 Constraint를 설정함

 

그러면 만약 체크 한다면 뭐가 바뀔지에 대해 님들은 아셈? 난 몰랐음ㅋ

결론부터 말하자면 Constrain to margins는

 

내 View의 내부 뷰(SubView)들을 배치할 때 마진을 주기 위함

 

임ㅎㅎ

머라는겨 ㅎㅎ 예제로 보자

 

 

 

 

이렇게 위처럼! 평소처럼! 우린 노란 뷰를 하나 만들었음!!

(참고로 노란 뷰는 Constrain to margins를 체크하지 않음)

 

자, 이상태에서 나는 노란 뷰의 SubView를 배치할 때 마진을 주고 싶어!! 한다면,

다음과 같이 Layout Margins라는 것을 이용해 내부 뷰에 대한 마진을 설정해줄 수 있음

 

 

 

 

해당 View의 Layout Margin에 보면, 기본 값이 Default로 설정되어 있는데

우리는 마진을 넣고 싶으니 이 값을 Fixed로 바꿔줘보셈!!

 

먼저 두번째 Language DirectionalFixed의 차이점은 무엇이냐면

 

 

 

 

AutoLayout 첫 시간에 공부한 Leading / Left와 Trailing / Right의 차이임!!

(글자가 시작되는 시점 어쩌고라 했었잖음?)

 

기본값이 8로 다 설정되어 있는데요??

맞음!! 기본 마진 값이 8임!!! 

그럼 기본 마진 값 8을 줬으니, 노란 뷰에도 어떤 변화가 있을까?

 

 

 

 

없음!!

왜냐?? 계속 설명했듯이,

노란 뷰 안에 배치되는 SubView에 대한 마진을 주는 것이라고 했음!!

 

따라서, 다음과 같이 SubView인 초록 뷰를 하나 추가해서

노란 뷰에 꽉 채우도록 Top/Leading/Trailing/Bottom을 모두 0으로 채워보겠음

 

 

 

 

뭐야 내 마진 8 돌려줘요

SubView를 채워도 초록 뷰에 마진이 들어가지 않는데 어캄!?!?

 

자, 이때 Constrain to margins가 등장하는 것임

SubView를 추가할 때 비로소 Constrain to margins를 체크해줘야 함!!

(당연히 Constrain to margins를 체크하지 않으면, 

노란 뷰의 Layout Margins는 ㅃㅃ됨)

 

 

 

 

이렇게!!! ㅎㅎㅎㅎ

그럼이제 위처럼 초록 뷰를 채울 때 분명 노란 뷰를 기준으로 모두 0으로 설정 했어도

노란 뷰의 내부 마진이 8로 설정되어 있기 때문에,

초록 뷰가 채워질 때 그만큼의 마진이 들어감!!!

(초록 벽 뒤에 노란 마진 공간 있어요)

 

 

 

 

참고로 마진이 들어갔다고 해서,

초록 뷰의 Constraints의 constant 값이 바뀌는 것은 아님!!

다 SuperView로 고정되어 있음에도,

노란 뷰의 Constrain to margin에 의해고정 마진이 들어가는 것임

 

이해가 갔을랑가 👀

참고로 저 마진 값을 바꾸고 싶다면,
당연히 초록 뷰의 마진 값이 아니라노란 뷰의 마진 값을 바꿔야 함

(노란 뷰 내부 배치되는 SubView의 마진을 지정하는 것이니!)

 

 

.

.

 정리해서

 

내부 뷰에 마진을 주고 싶은 SuperView의 AutoLayout을 설정할 땐

Constrain to margins를 체크할 필요 없는 대신

주고싶은 마진 만큼 Layout Margins를 설정해주고,

 

SuperView의 Constrain to margins 값을 따르고 싶은 SubView들이

AutoLayout을 설정할 때 Constrain to margins을 체크해줘야하는 것 같음!

 

 

 

 

2. 언제 쓰려나?

 

난 음 약간 이 Cosntraint to margins를 이해했을 때

CollectionView의 Section Insets의 느낌이 강했는데..

 

만약

내 View에 그려질 SubView는 내 테두리에 닿을 때 무조건 이만큼의 마진이 필요해!!

 

라고 판단될 때 사용하면 유의미 할 수도..?

사실 Constraints로도 충분하기 때문에..

알아서.. 잘 쓰시길..

 

 

 

 

 

 

 

.

.

.

꺄악 공부가 길어져 운동 늦어서 이만 ㅌㅌ

오타 및 잘못된 내용 피드백 대환영!

 

 



Calendar
«   2024/05   »
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
최근 댓글
Visits
Today
Yesterday